Description:

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

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

Hint:

\(n,m<=500,t<=4*10^6​\)

Solution:

比较好的一道线性dp

\[f[i+m+j]=\sum min(f[i]+s[i+m+j]-s[i]+b[i]*(m+j))
\]

\((0 \le j<m)\)

其中:

\(s_i表示从1到i所有人等车时间的前缀和,b_i表示人数的前缀和\)

#include<bits/stdc++.h>
using namespace std;
const int mxn=5050,mxt=4e6+5;
int n,m,T,t=mxt,ans=mxt;
int a[mxn],b[mxt],f[mxt],s[mxt]; inline void checkmax(int &x,int y) {if(x<y) x=y;}
inline void checkmin(int &x,int y) {if(x>y) x=y;} int main()
{
scanf("%d%d",&n,&m); memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;++i) {
scanf("%d",a+i); ++b[a[i]];
checkmin(t,a[i]),checkmax(T,a[i]);
}
sort(a+1,a+n+1); int cnt=1,tot=0;
for(int i=0;i<=T+2*m;++i) {
while(i>a[cnt]&&cnt<=n) ++tot,++cnt;
b[i]+=b[i-1];
s[i]=s[i-1]+tot;
}
f[0]=0;
for(int i=0;i<=T+2*m;++i) f[i]=s[i];
for(int i=0;i<=T+m;++i) {
checkmin(f[i+m],f[i]+(s[i+m]-s[i])-b[i]*m);
for(int j=1;j<m;++j)
if(b[i]!=b[i+m+j]) //剪枝,最多转移到i+m
checkmin(f[i+m+j],f[i]+(s[i+m+j]-s[i])-b[i]*(m+j));
}
for(int i=T;i<=T+m;++i) checkmin(ans,f[i]);
printf("%d",ans);
return 0;
}

[NOIP2018]摆渡车的更多相关文章

  1. $NOIp$普及组做题记录

    \([NOIp2014]\) 螺旋矩阵 \(Sol\) 直接模拟,一次走一整行或者一整列.复杂度\(O(n)\). \(Code\) #include<bits/stdc++.h> #de ...

  2. P5017 [NOIP2018 普及组] 摆渡车

    P5017 [NOIP2018 普及组] 摆渡车 题目 P5017 思路 将实际问题抽象后,不难发现这是一个 区间 \(DP\) 我们不妨认为时间是一条数轴,每名同学按照到达时刻分别对应数轴上可能重合 ...

  3. Luogu 5017 NOIP2018普及组T3 摆渡车 (斜率优化 + 必要的转移进行剪枝)

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

  4. 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】

    前言 在考场被这个题搞自闭了,那个时候自己是真的太菜了.qwq 现在水平稍微高了一点,就过来切一下这一道\(DP\)经典好题. 附加一个题目链接:[洛谷] 正文 虽然题目非常的简短,但是解法有很多. ...

  5. NOIp2018普及组T3暨洛谷P5017 摆渡车:题解

    题目链接:https://www.luogu.org/problemnew/show/P5017 emm,这次的真的不简单的,T3比T4难? 醉了... 蒟蒻肯定没有其他大佬讲的好啊,但肯定尽力,真的 ...

  6. [Noip2018普及]摆渡车

    生涯回忆录彻底摸了...反正也没啥人看( 过几天要给普及组神犇讲课就寻思做一点普及题,然后差点被锤爆,, 题在luogu上找的https://www.luogu.org/problemnew/show ...

  7. [NOIP2018(PJ)] 摆渡车

    题目链接 题意 有 $n$ 个同学在等车,每位同学从某时刻开始等车,相邻两趟车之间至少间隔 $m$ 分钟.凯凯可以任意安排发车时间,求所有同学等车时间之和的最小值. 分析 这题首先能想到是动态规划 很 ...

  8. 初征——NOIP2018游记

    前言 从最初接触oi到今年noip到来,也已经将近有一年了.从对于程序一窍不懂到现在开始学习算法,只是短短的不到一年的时间罢了.这次noip,不仅仅是我oi生涯的第一次noip,更是相当于是对我这一年 ...

  9. 【游记】NOIP2018复赛

    声明 我的游记是一个完整的体系,如果没有阅读过往届文章,阅读可能会受到障碍. ~~~上一篇游记的传送门~~~ 前言 参加完NOIP2018的初赛过后,我有点自信心爆棚,并比之前更重视了一点(也仅仅是一 ...

随机推荐

  1. Vue-切割json数组字符串并循环输出

    Json "detailList":[ " 04/08/2016 - LA - - Dept. - TITLE (Lien Reported)", " ...

  2. 查看python脚本的运行pid,让python脚本后台运行

    ps -ef | grep Productor.py | grep -v grep # 先测试好 python3  /usr/local/software/ELK/Productor.py # 没问题 ...

  3. 报错ERR_CONNECTION_REFUSED,如何解决(原创)

    当我访问我的一个后天地址的时候,突然出现了ERR_CONNECTION_REFUSED,但是之前是可以访问的. 我先ping了下这个网址,发现是OK的 然后我想可能是80端口有问题,也就是说可能是WE ...

  4. Ubuntu下Gradle环境配置

    sudo gedit ~/.profile sudo source ~/.profile env # for java export JAVA_HOME=/home/cmm/jdk export CL ...

  5. Task.Run()任务执行

    1)Task本身就是异步执行的(4.5的那个类). 2)控制数量和终止线程问题可以考虑这个模式: static async void RunAsync() { CancellationTokenSou ...

  6. mysql表管理

    4.1 查看所有表 查看所有表语句: show tables; 例: mysql> show tables; +-----------------+ | Tables_in_emp | +--- ...

  7. Python 命令模式和交互模式

    命令模式 在系统CMD命名模式下执行 命令执行到脚本所在目录 执行python Test.py 可直接一次执行完脚本里面所有的语句 交互模式下 一行一行执行

  8. docker运行php网站程序

    有一个之前的php网站程序需要迁移到K8S,简单调研了下. 基础镜像 官方提供了诸如php:7.1-apache的基础镜像,但是确认必要的扩展,例如gd,当然官方提供了docker-php-ext-i ...

  9. WebApi 得到提交过来的 post 数据

    byte[] byts = new byte[System.Web.HttpContext.Current.Request.InputStream.Length]; System.Web.HttpCo ...

  10. BZOJ1458 士兵占领 网络流 最大流 SAP

    原文链接http://www.cnblogs.com/zhouzhendong/p/8384699.html 题目传送门 - BZOJ1458 题意概括 有一个M * N的棋盘,有的格子是障碍.现在你 ...