题目描述

有n 名同学要乘坐摆渡车从人大附中前往人民大学,第 i位同学在第 ti 分钟去 等车。只有一辆摆渡车在工作,但摆渡车容量可以视为无限大。摆渡车从人大附中出发、 把车上的同学送到人民大学、再回到人大附中(去接其他同学),这样往返一趟总共花费m分钟(同学上下车时间忽略不计)。摆渡车要将所有同学都送到人民大学。

凯凯很好奇,如果他能任意安排摆渡车出发的时间,那么这些同学的等车时间之和最小为多少呢?

注意:摆渡车回到人大附中后可以即刻出发。

输入格式

第一行包含两个正整数 n,m,以一个空格分开,分别代表等车人数和摆渡车往返 一趟的时间。

第二行包含 n个正整数,相邻两数之间以一个空格分隔,第 i 个非负整数 ti 代 表第 i 个同学到达车站的时刻。

输出格式

输出一行,一个整数,表示所有同学等车时间之和的最小值(单位:分钟)。

输入输出样例

输入 #1

5 1
3 4 4 3 5

输出 #1

0

输入 #2

5 5
11 13 1 5 5

输出 #2

4

说明/提示

【输入输出样例 1 说明】

同学 1 和同学 4 在第 3 分钟开始等车,等待 0 分钟,在第 3 分钟乘坐摆渡车出发。摆渡车在第 4 分钟回到人大附中。

同学 2 和同学 3 在第 44 分钟开始等车,等待 0 分钟,在第 4 分钟乘坐摆渡车 出发。摆渡车在第 5 分钟回到人大附中。

同学 5 在第 5 分钟开始等车,等待 0 分钟,在第 5 分钟乘坐摆渡车出发。自此 所有同学都被送到人民大学。总等待时间为 0。

【输入输出样例 2 说明】

同学 3 在第 1 分钟开始等车,等待 0 分钟,在第 1 分钟乘坐摆渡车出发。摆渡 车在第 6 分钟回到人大附中。

同学 4 和同学 5 在第 5 分钟开始等车,等待 1 分钟,在第 6 分钟乘坐摆渡车 出发。摆渡车在第 11 分钟回到人大附中。

同学 1 在第 11 分钟开始等车,等待 2 分钟;同学 2 在第 13 分钟开始等车, 等待 0 分钟。他/她们在第 13 分钟乘坐摆渡车出发。自此所有同学都被送到人民大学。 总等待时间为 4。

可以证明,没有总等待时间小于 4 的方案。

本题公式就是

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=4000105;
int n,m,t,ti,ans=1e9,cnt[N],sum[N],f[N];
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&ti);t=max(t,ti);cnt[ti]++;sum[ti]+=ti;}for(int i=1;i<t+m;i++) {cnt[i]+=cnt[i-1];sum[i]+=sum[i-1];}for(int i=0;i<t+m;i++){f[i]=cnt[i]*i-sum[i];for(int j=max(i-m-m+1,0);j<=i-m;j++){f[i]=min(f[i],f[j]+(cnt[i]-cnt[j])*i-(sum[i]-sum[j]));}}for(int i=t;i<t+m;i++)ans=min(ans,f[i]);printf("%d",ans);return 0;
}

[NOIP2018]摆渡车(c++)相关推荐

  1. [NOIp2018] 摆渡车

    普及组考斜率优化 考虑dpdpdp fif_ifi​表示在iii时刻发车的最小等待时间 那么我们可以得到转移方程 fi=min⁡0≤j≤i−m{fj+(cnti−cntj)i−(sumi−sumj)} ...

  2. 2018 NOIP 普及组

    文章目录 T1 标题统计 T1分析 T2 龙虎斗 T2分析 T3 摆渡车 T3分析 解法 I 解法 II T4 对称二叉树 T4分析 T1 标题统计 题目点击→计蒜客 [NOIP2018] 标题统计 ...

  3. P5017 NOIP2018 普及组 摆渡车

    P5017 NOIP2018 普及组 摆渡车 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 显然要把人按照到达时间排序.然后考虑 dp. 设 \(f(i)\) 表示前 \(i\) ...

  4. 摆渡车(noip2018 pj t3)

    摆渡车(题目和测试右转 洛谷P5017) 做法:dp+各种优化(剪枝) 这道题考场上看了一脸懵逼...第一眼看这 tm 不是个一维dp吗...结果按着这个朦胧的思路,删删改改约莫0.5h,终于过了小样 ...

  5. 【NOIP2018】摆渡车

    [题意] 1.第i个同学在第t[i]分钟到达车站 2.摆渡车一次可以装下无数人 3.两次发车的间隔时间m分钟 求所有等车时间和的最小值 [解题] 我们不妨认为时间是一条数轴,每名同学按照到达时刻分别对 ...

  6. NOIP2018普及组复赛——T3摆渡车

    题目描述 有 n n n名同学要乘坐摆渡车从人大附中前往人民大学,第 i i i 位同学在第 t i t_i

  7. P5017 [NOIP2018 普及组] 摆渡车 题解

    题目传送门 题目描述 有 n 名同学要乘坐摆渡车从人大附中前往人民大学,第 i 位同学在第 ti 分钟去 等车.只有一辆摆渡车在工作,但摆渡车容量可以视为无限大.摆渡车从人大附中出发. 把车上的同学送 ...

  8. NOIp2018普及组-摆渡车

    (作为一名已经离开了普及组的退役选手感到万分庆幸) 题目链接:https://www.luogu.org/problemnew/solution/P5017 1.感觉就是一个类似线性的以时间作为维度的 ...

  9. [NOIP2018 普及组] 摆渡车题解

    题目链接 题意 给出n名同学到达车站的时间,只有一辆摆渡车,来回需要mmm分钟,求将所有同学摆渡到终点,所有同学的最少等车时间之和. 抽象一下题意: 数轴:时间轴 点权值:此时刻等车的人数 区间右端点 ...

最新文章

  1. 管道符和作业控制 shell变量 环境变量配置文件
  2. 在echarts3中使用字符云
  3. Android之奔溃提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap
  4. jax-rs jax-ws_什么是JAX-RS注释?
  5. static关键字(修饰函数、局部变量、全局变量)
  6. (二)再议MII、RMII、GMII接口
  7. 请简述什么是spring的ioc和di_Spring的IoC与DI的理解
  8. 生活杂谈-空调的修理
  9. stack(栈)数据结构详解
  10. IDEA构建JDK_1.8源码阅读环境过程详解
  11. 【实习之T100开发】帆软报表笔记
  12. java中验证国际手机号码
  13. 智道分析吊瓜子的营养价值
  14. 计算机毕业答辩程序无法运行,计算机专业毕业答辩程序
  15. shell脚本获取当前时间和1分钟/1小时前时间
  16. 轻松一下,做到题目吧。
  17. SSH+ExtJs4开发项目的Demo实例视频讲解
  18. Xshell 使用技巧
  19. 华为p40鸿蒙2.0演示,华为P40强硬登场:屏下镜头+鸿蒙2.0+徕卡5摄,国产骄傲绝不服输...
  20. 电影《可可西里》散记

热门文章

  1. oracle 进去rman,oracle数据库RMAN使用方法简介 | IT民工 or IT精英
  2. sklearn中的k折交叉验证
  3. python编程中除号的使用
  4. 算法设计与分析大师班
  5. 如何在火狐浏览器中使用迅雷下载
  6. 安卓手机充电慢_安卓充电提示音怎么设置?安卓手机充电提示音设置教程
  7. byte数组快速拷贝,byte数组合并,System.arraycopy详解
  8. python中main方法的用法_Python中的main方法
  9. 警惕!最常见的三类诈骗短信
  10. 短信诈骗 smishing