【洛谷 P5017】 摆渡车(斜率优化)
题目链接
算是巩固了一下斜率优化吧。
设\(f[i]\)表示前\(i\)分钟最少等待时间。
则有\(f[i]=\min_{j=0}^{i-m}f[j]+(cnt[i]-cnt[j])*i-(sum[i]-sum[j])\)
其中\(cnt[i]\)和\(sum[i]\)分别表示前\(i\)分钟去等车的学生数量和他们去等车的时刻之和。
变形一下得\(f[j]+sum[j]=i*cnt[j]+i*cnt[i]-sum[i]-f[i]\)
维护一个下凸包即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 510;
const int MAXT = 4000010;
int n, m, t[MAXN], cnt[MAXT], sum[MAXT], f[MAXT], ans = 2147483647, q[MAXT], head, tail;
inline double k(int i, int j){
return (double)(f[j] + sum[j] - f[i] - sum[i]) / (cnt[i] == cnt[j] ? 1e-9 : cnt[j] - cnt[i]);
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i){
scanf("%d", &t[i]);
cnt[t[i]]++;
sum[t[i]] += t[i];
}
sort(t + 1, t + n + 1);
for(int i = 0; i < t[n] + m; ++i)
cnt[i] += cnt[i - 1], sum[i] += sum[i - 1];
for(int i = 0; i < m; ++i)
f[i] = cnt[i] * i - sum[i];
for(int i = m; i < t[n] + m; ++i){
while(head < tail && k(q[tail - 1], q[tail]) >= k(q[tail], i - m)) --tail;
q[++tail] = i - m;
while(head < tail && k(q[head], q[head + 1]) <= i) ++head;
int j = q[head];
f[i] = f[j] + (cnt[i] - cnt[j]) * i - (sum[i] - sum[j]);
if(i >= t[n]) ans = min(ans, f[i]);
}
printf("%d\n", ans);
return 0;
}
【洛谷 P5017】 摆渡车(斜率优化)的更多相关文章
- NOIp2018普及组T3暨洛谷P5017 摆渡车:题解
题目链接:https://www.luogu.org/problemnew/show/P5017 emm,这次的真的不简单的,T3比T4难? 醉了... 蒟蒻肯定没有其他大佬讲的好啊,但肯定尽力,真的 ...
- 洛谷P5017摆渡车
题目 一道做法多种多样的题,DP做法的状态也很多. 我用\(dp[i]\)表示在第i秒发车的时间和,然后dp方程就很好写了 \(dp[i] = dp[j] + i车的等待时间\)j属于i-2m ~ i ...
- 洛谷 P5017 摆渡车
题目传送门 解题思路: 个人感觉DP这东西,只可意会,不可言传 AC代码: #include<iostream> #include<cstdio> #include<cs ...
- Lightning Conductor 洛谷P3515 决策单调性优化DP
遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...
- Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化
https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...
- 『摆渡车 斜率优化dp及总结』
摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...
- 洛谷P5017:摆渡车——题解
https://www.luogu.org/problem/P5017 参考:https://www.luogu.org/blog/ztyluogucpp/solution-p5017 我想我大概是废 ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
随机推荐
- 2019 SDN第一次阅读作业
目录 阅读 文章链接 阅读 阅读文章<软件定义网络(SDN)研究进展>,并根据所阅读的文章,书写一篇博客,回答以下问题(至少3个): 1.为什么需要SDN?SDN特点? 背景:传统网络的层 ...
- 【2019.12.04】SDN上机第6次作业
实验拓扑 通过图形化界面建立拓扑 先清除网络拓扑 sudo mn -c 生成Python语句 #!/usr/bin/python from mininet.net import Mininet fro ...
- 刷题记录:[CISCN 2019 初赛]Love Math
目录 刷题记录:[CISCN 2019 初赛]Love Math 思路一 思路二 总结 刷题记录:[CISCN 2019 初赛]Love Math 题目复现链接:https://buuoj.cn/ch ...
- Java_jdbc 基础笔记之十三 数据库连接(DAO)
public class DAO { // INSERT, UPDATE, DELETE 操作都可以包含在其中 public void update(String sql, Object... arg ...
- 视频色彩空间RGB、YUV、YCbCr
RGB.YUV和YCbCr都是人为规定的彩色模型或颜色空间(有时也叫彩色系统或彩色空间).它的用途是在某些标准下用通常可接受的方式对彩色加以描述.本质上,彩色模型是坐标系统和子空间的阐述. RGB R ...
- ai segmentation
不只是医学图像啊,自然图像分割用unet也能取得非常好的效果.搞过kaggle语义分割的比赛carvana.感觉最好用的还是unet,其次linknet和提拉米苏也好用.large kernel也不错 ...
- pip的安装
1.get-pip.py安装 (官方)https://pip.pypa.io/en/stable/installing/#installing-with-get-pip-py $wget https: ...
- Python3基础 dict __len__ 统计键值对的数量
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- VMware的包格式vmdk转换为virtualBox的ova
使用winxp的vmdk作为案例 1 使用vmvare导入vmdk的winxp,点击文件---->导出为ovf 2 找到生成的ovf文件 3 打开virtualBox 管理---->导入虚 ...
- 2017ACM/ICPC广西邀请赛 1007 Duizi and Shunzi
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...