NOIP2018 普及组 T3 摆渡车

文章目录

  • 题目传送门
  • 算法解析
  • 总代码
  • 提交记录
  • 尾声

题目传送门

洛谷 P5017 [NOIP2018 普及组] 摆渡车

算法解析

本题是一道 D P DP DP 题。

我们可以把时间想成一个数轴,这样每趟车就是一个区间(到达时间到离开时间)。

定义 f i f_i fi 表示前 i i i 个点,最后一个区间右边界是 i i i,所有点到各自区间的右边界的距离之和的最小值。

这样的话,状态转移方程为:

f i = m i n ( f j + ∑ j < t k ≤ i i − t k f_i = min(f_j + \sum^{}_{j < t_k \leq i}{i-t_k} fi=min(fj+j<tkiitk ( j + m ≤ i ) ) (j + m \leq i)) (j+mi))

但是枚举所有的 k k k 肯定是不行的 QWQ,所以我们要做一个前缀和,即:

c n t i cnt_i cnti 表示前 i i i 个时间点要上车的人数, s u m i sum_i sumi 表示前 i i i 个时间点要上车的人的到达车站时间之和。

于是,状态转移方程变为:

f i = m i n ( f j + ( c n t i − c n t j ) ⋅ i − ( s u m i − s u m j ) ) f_i = min(f_j + (cnt_i - cnt_j) \cdot i - (sum_i - sum_j)) fi=min(fj+(cnticntj)i(sumisumj))

这样,我们就可以得出代码:

#include <cstdio>
using namespace std;

const int N = 4e6 + 105;

int n, m;
int t;
int cnt[N];
int sum[N];
int maxt;
int f[N];
int ans;

void bemin(int &a, int b) {
	a = a < b ? a : b;
}

void bemax(int &a, int b) {
	a = a > b ? a : b;
}

void inp() {
	scanf("%d%d", &n, &m);
	
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &t);
		++cnt[t];
		sum[t] += t;
		bemax(maxt, t);
	}
}

void work() {
	for(int i = 1; i < maxt + m; ++i) {
		cnt[i] += cnt[i - 1];
		sum[i] += sum[i - 1];
	}
	
	for(int i = 1; i < maxt + m; ++i) {
		f[i] = cnt[i] * i - sum[i];
		for(int j = 0; j <= i - m; ++j)
			bemin(f[i], f[j] + (cnt[i] - cnt[j]) * i - (sum[i] - sum[j]));
	}
	
	ans = 1e9;
	
	for(int i = maxt;  i < maxt + m; ++i)
		bemin(ans, f[i]);
	
	printf("%d\n", ans);
}

int main() {
	inp();
	work();
	
	return 0;
}

但是只能拿到 50 分 QWQ。

我们发现直接在 i − 2 ⋅ m + 1 i - 2 \cdot m + 1 i2m+1 的位置就可以安排一趟车,小于它的也只能更大,所以可以改为:

for(int j = max(0, i - 2 * m + 1); j <= i - m; ++j)

还有就是如果没有人等待,那么这趟车就肯定不能发对吧,所以可以加个优化:

if(i >= m && cnt[i] == cnt[i - m]) {
	f[i] = f[i - m];
	continue;
}

这样这道题就 A 了

总代码

#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 4e6 + 105;

int n, m;
int t;
int cnt[N];
int sum[N];
int maxt;
int f[N];
int ans;

void bemin(int &a, int b) {
	a = a < b ? a : b;
}

void bemax(int &a, int b) {
	a = a > b ? a : b;
}

void inp() {
	scanf("%d%d", &n, &m);
	
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &t);
		++cnt[t];
		sum[t] += t;
		bemax(maxt, t);
	}
}

void work() {
	for(int i = 1; i < maxt + m; ++i) {
		cnt[i] += cnt[i - 1];
		sum[i] += sum[i - 1];
	}
	
	for(int i = 1; i < maxt + m; ++i) {
		if(i >= m && cnt[i] == cnt[i - m]) {
			f[i] = f[i - m];
			continue;
		}
		
		f[i] = cnt[i] * i - sum[i];
		for(int j = max(0, i - 2 * m + 1); j <= i - m; ++j)
			bemin(f[i], f[j] + (cnt[i] - cnt[j]) * i - (sum[i] - sum[j]));
	}
	
	ans = 1e9;
	
	for(int i = maxt;  i < maxt + m; ++i)
		bemin(ans, f[i]);
	
	printf("%d\n", ans);
}

int main() {
	inp();
	work();
	
	return 0;
}

提交记录

AC 记录

尾声

如果这篇博客对您(您的团队)有帮助的话,就帮忙点个赞,加个关注!

最后,祝您(您的团队)在 OI 的路上一路顺风!!!

┬┴┬┴┤・ω・)ノ ByeBye

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/553772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

今天刷两题(day2)

题目一&#xff1a;最长公共前缀 题目描述&#xff1a; 给你一个大小为 n的字符串数组 strs &#xff0c;其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀&#xff0c;返回这个公共前缀。输入输出描述&#xff1a; 输入&#xff1a;"abca","…

照片光晕光学特效模拟调色Boris FX Optics 2024 mac下载安装教程

Boris FX Optics 2024 Mac版是一款照片光晕光学特效模拟调色软件&#xff0c;旨在模拟光学相机滤镜&#xff0c;专用镜头&#xff0c;胶卷和颗粒&#xff0c;镜头光晕&#xff0c;光学实验室处理&#xff0c;色彩校正以及自然光和摄影效果。用户可以通过应用光学并从160个滤镜和…

Day43:LeedCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果…

图书管理系统概述

自友图书馆管理系统解决方案适用于中小学、大中专院校以及企事业单位中小型图书馆的自动化管理需求&#xff0c;其功能覆盖了图书馆自动化集成管理业务流程所包括的所有环节。《图书馆管理系统》首先应该按照我国图书馆行业通用CNMARC格式及《中图法第四版》行业标准开发而成,支…

计算机网络-IS-IS基础概念二

前面已经学习了IS-IS的定义、组成、NET地址标识以及路由器级别分类等&#xff0c;今天继续学习IS-IS基础概念知识。 参考链接&#xff1a;IS-IS路由协议基础概念 一、IS-IS支持的网络类型 IS-IS会自动根据接口的数据链路层封装决定该接口的缺省网络类型&#xff0c; IS-IS支持两…

【Go语言快速上手(二)】 分支与循环函数讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; Go快速上手 1. 前言2. 分支与循环2.1…

中国隧道空间分布

中国隧道空间分布数据&#xff0c;包含2020年全国大部分地区16000余条隧道分布点位数据&#xff0c;数据包括市名称、区县名称、隧道名称和隧道经纬度。数据包含shp和EXCEl两种格式&#xff0c;部分隧道空间位置有偏移。 欢迎大家关注、收藏和留言&#xff0c;如果您想要什么数…

【GPT-4最新研究】GPT-4与科学探索:揭秘语言模型在科学领域的无限可能

各位朋友们&#xff0c;你们知道吗&#xff1f;自然语言处理领域最近取得了巨大的突破&#xff01;大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;简直就像打开了新世界的大门。它们不仅在语言理解、生成和翻译方面表现出色&#xff0c;还能涉足许多其他领域&…

网站创建的流程是什么

网站的创建过程包括几个主要的步骤&#xff0c;其中涉及到一系列的决策和实践操作。下面我将详细介绍网站创建的流程&#xff0c;帮助读者了解如何创建一个成功的网站。 第一步&#xff1a;确定网站目标和功能 在创建网站之前&#xff0c;你需要明确自己网站的目标和功能。是用…

【Proteus】51单片机对直流电机的控制

直流电机&#xff1a;输出或输入为直流电能的旋转电机。能实现直流电能和机械能互相转换的电机。把它作电动机运行时是直流电动机&#xff0c;电能转换为机械能&#xff1b;作发电机运行时是直流发电机&#xff0c;机 械能转换为电能。 直流电机的控制&#xff1a; 1、方向控制…

详细介绍医用PSA变压吸附制氧机设备的工艺特点

随着技术的不断进步&#xff0c;医用氧气作为一种重要的治疗资源&#xff0c;其供应方式也在不断地改进和升级。其中&#xff0c;医用PSA(Pressure Swing Adsorption&#xff0c;变压吸附)变压吸附制氧机设备因其高效、安全、稳定的特点&#xff0c;受到了广大机构的青睐。那么…

Biome 1.7 发布,支持从 ESLint 和 Prettier 迁移

近日&#xff0c;Biome v1.7 正式发布&#xff01;这个新版本提供了从 ESLint 和 Prettier 迁移的简单路径。它还引入了格式化程序和 linter 的实验性机器可读报告、新的 linter 规则和许多修复。 使用以下命令更新 Biome&#xff1a; npm install --save-dev --save-exact b…

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统 【中文名称】磷脂-聚乙二醇-磷酸三苯酯 【英文名称】DSPE-PEG-TPP 【结 构】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度】95%以上 【保 存】-20℃ 【规 格】50mg,…

windows11 wsl2 ubuntu20.04安装vision mamba并进行测试

windows11 wsl2 ubuntu20.04安装vision mamba 安装流程使用cifar-100测试安装成功 安装流程 vision mamba安装了半天才跑通&#xff0c;记录一下流程在wsl上安装cuda wget https://developer.download.nvidia.cn/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05…

浅析ARM Contex-CM3内核架构

目录 概述 1. Cortex-M3类型MCU 1.1 MCU 架构 1.2 实时性系统概念 1.3 处理器命名法 1.4 MCU的一些知识 2. Cortex-M3 概览 2.1 Cortex-M3综述 2.2 寄存器组 2.3 操作模式和特权极别 2.4 内建的嵌套向量中断控制器 2.5 存储器映射 2.6 总线接口 2.7 存储器保护单元…

Spring Boot 目前还是最先进的吗?

当谈到现代Java开发框架时&#xff0c;Spring Boot一直处于领先地位。它目前不仅是最先进的&#xff0c;而且在Java生态系统中拥有着巨大的影响力。 1. 什么是Spring Boot&#xff1f; Spring Boot是由Spring团队开发的开源框架&#xff0c;旨在简化基于Spring的应用程序的开…

L1-8 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示&#xff1a; 每次游戏玩家会拿到一张彩票&#xff0c;上面会有 9 个数字&#xff0c;分别为数字 1 到数字 9&#xff0c;数字各不重复&#xff0c;并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…

sql篇-内连接-左连接-右连接

内连接&#xff1a;表1 inner join 表2 on 条件 inner join join&#xff08;简写&#xff09; 查找&#xff1a;满足 匹配两个表条件的记录&#xff1a;student.s_id s.s_id(不匹配的记录不筛选) select * from student inner join score s on student.s_id s.s_id; 查询…

mpeg4标准与 H264标准下QP值间 关系

1 标准对比 MPEG(mpeg1,mpeg2,mpeg4) 与H264 QP值间 关系。 x264vfw 的1pass 是按照 I q:21 P q:24 B q:26 的量化算的,而且在vfw里面不能改变这些参数. 但在mencoder里则可以定义1pass的 qp_constant<1−51> 这个和xvid不同的,xvid一般是用q2跑1pass的,当然你也可以在x2…

Python基于面向对象的图书馆借阅管理系统

应用面向对象程序设计思想,类设计合理。 图书借阅系统功能及设计要求: 主要功能: 1、学生的登陆和注册 2、管理员的登陆和注册3、学生登录后,可以操作书籍的借阅、归还以及查看已借书籍的信息 4、管理员登录后 (1)可以对学生信息进行增加、修改、删除; (2)可以对书籍的…
最新文章