链接

点击跳转

题解

现在的普及组题质量还蛮高的

首先这题读完就想到是dpdpdp

fif_ifi​表示在iii时刻发车,这之前出现的人等待的最小总时长是多少

转移就是fi=min(fj+t)f_i = min(f_j+t)fi​=min(fj​+t),ttt就是从j+1j+1j+1到iii这个时刻出现的人等待的总时长

然后发现当j<i−2∗mj<i-2*mj<i−2∗m时转移是重复的,因为这两次发车之间空出了完整的mmm时间,我为啥不补发一辆呢?

这样就有了一个O(m×max(ti))O(m\times max(t_i))O(m×max(ti​))的做法

然后注意到nnn很小,那也就是说人出现的很稀疏

这个优化不太好想,注意一个问题,我的dpdpdp方程中ttt是两次发车之间的人等待的时长,那么如果两次发车之间没有人,ttt显然等于000,那么问题就迎刃而解了,我按时间从小到大dpdpdp,记录上一次出现的人在哪个时间,如果当前时间和那个时间的差大于2m2m2m,那么我的dpdpdp就变成了单纯的区间求最值,一个单调队列就搞定了

最终的复杂度O(nm+max(ti))O(nm+max(t_i))O(nm+max(ti​))

代码

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 4000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(_,__) for(_=1;_<=(__);_++)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{ll c, f(1);for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;for(;isdigit(c);c=getchar())x=x*10+c-0x30;return f*x;
}
int n, f[maxn], m, cnt[maxn], s[maxn];
int main()
{int i, j, t, last=-1;n=read(), m=read();rep(i,n)cnt[read()]++;rep(i,int(4e6))s[i]=s[i-1]+cnt[i];deque<int> q;for(i=0;i<m;i++){if(cnt[i])last=i;for(j=0;j<=i;j++)f[i]+=cnt[j]*(i-j);}for(i=m;i<=(int)4e6;i++){while(q.size() and f[q.back()]>f[i-m])q.pop_back(); q.push_back(i-m);if(cnt[i])last=i;if(i-last>=2*m and last>0){while(i-q.front()>=2*m)q.pop_front();f[i]=f[q.front()];continue;}f[i]=0x7fffffff;t=0;for(j=i-1;j>=0 and i-j<2*m;j--){if(i-j>=m)f[i]=min(f[i],f[j]+t);t+=cnt[j]*(i-j);}}int ans=0x7fffffff;for(i=last;i<=int(4e6);i++)ans=min(ans,f[i]);cout<<ans;return 0;
}

luoguP5017 摆渡车相关推荐

  1. 马斯克不仅承包NASA火箭发射,现在连火箭“摆渡车”都换成特斯拉了

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 人类从地球到太空,交通工具快被马斯克承包完了. 如今,前往Space X火箭发射塔,摆渡车已改用特斯拉. 一辆刷上NASA标识的Model ...

  2. 摆渡车(noip2018 pj t3)

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

  3. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  4. 【NOIP2018】摆渡车

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

  5. P5017 NOIP2018 普及组 摆渡车

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

  6. [NOIP 2018 T3]摆渡车

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

  7. 凭门票 成都露天音乐公园多条摆渡车线路免费坐

    五一小长假期间,位于凤凰山的成都露天音乐公园将迎来"首秀","礼赞新中国70周年·致敬盛典暨成都卡路里运动音乐节"一系列活动将在这里举行.4月30日,记者从成都 ...

  8. [NOIP2018]摆渡车(c++)

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

  9. 微信小程序之校园摆渡车系统

    微信小程序之校园摆渡车系统 简介 本项目的设计初衷是为了解决在校一直等待校园摆渡车的情况,想通过这个软件实现司机可以实时看到等车人的位置,等车人也可以实时的叫车,并且看到司机位置,并且恰逢 orcl大 ...

最新文章

  1. JAVA线程池(ThreadPoolExecutor)源码分析
  2. 从 WordCount 到 MapReduce 计算模型
  3. c语言实现天气预报步骤,天气预报是怎么预测天气的?天气预报制定需要哪些步骤...
  4. Keras .ImageDataGenerator图像增强用法大全以及如何和模型结合起来(有代码)
  5. Shell——常用工具(cut、sed、awk、sort)
  6. PHP经验总结 - 开发技巧分享
  7. Android开发之RadioButton位于文字右边的显示方法
  8. 防止多次提交的几个比较
  9. eclipse中启动tomcat的项目路径
  10. 运营级IOS一键签名程序源码 支持app超级签名一键分发平台
  11. 最担心的事情还是发生了!三星折叠屏手机翻车:闪屏、黑屏、“脱皮”
  12. mysql性能优化学习_mysql学习——性能优化之sql优化
  13. wepe 装linux ubuntu,Ubuntu16.04下安装Wechat的实现方法
  14. All boundaries are conventions, waiting to be transcended.
  15. 开通5G网络服务三个月,中国广电交出了什么样的答卷?
  16. 需求文档(PRD文档)
  17. 百度网盘无需开会员也能享受高速下载通道
  18. 红巨星视频调色AE插件 Red Giant Magic Bullet Suite 16.0.0 WIN
  19. 新手学习selenium路线图(老司机亲手绘制)-学前篇(转上海悠悠)
  20. (一百五十一)Android P 真正创建sta iface的地方

热门文章

  1. CAD图形离散成数据点
  2. 一起来学大数据|整合SpringMVC与Mybatis,各司其职相得益彰
  3. pycharm2017.1专业版破解
  4. 解决上传图片自动旋转的问题以及对图片进行压缩上传
  5. Java main方法
  6. leetcode:剑指 Offer 63. 股票的最大利润【记录前缀最小和 or 无脑线段树】
  7. php 自动收货’_PHP实现电商订单自动确认收货redis队列
  8. Anderson《空气动力学基础》5th读书笔记 第4记——黏性流动入门
  9. 含论文基于JAVA零食销售商城【数据库设计、论文、源码、开题报告】
  10. android创建webview,Android Webview总结