CF-311B Cats Transport(斜率优化DP)
题目链接
题目描述
小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员。
农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号。
第 \(i\) 座山与第 \(i-1\) 座山之间的距离为 \(D_i\)。
饲养员都住在 \(1\) 号山。
有一天,猫出去玩。
第 \(i\) 只猫去 \(H_i\)号山玩,玩到时刻 \(T_i\)
停止,然后在原地等饲养员来接。
饲养员们必须回收所有的猫。
每个饲养员沿着路从 $1 $号山走到 N 号山,把各座山上已经在等待的猫全部接走。
饲养员在路上行走需要时间,速度为\(1\)米/单位时间。
饲养员在每座山上接猫的时间可以忽略,可以携带的猫的数量为无穷大。
例如有两座相距为 1 的山,一只猫在 2 号山玩,玩到时刻 3 开始等待。
如果饲养员从 1 号山在时刻 2 或 3 出发,那么他可以接到猫,猫的等待时间为 0 或 1。
而如果他于时刻 1 出发,那么他将于时刻 2 经过 2 号山,不能接到当时仍在玩的猫。
你的任务是规划每个饲养员从 1 号山出发的时间,使得所有猫等待时间的总和尽量小。
饲养员出发的时间可以为负。
分析
接猫是任务,p个饲养员,每个饲养员接猫可以看作把几个猫放到一个集合。
第\(i\)个猫被一个饲养员从1号点出发去接,等待时间与饲养员出发时刻有关。但出发时刻必须大于\(T[i] -\sum_{1}^iD[i]\)。将这个时间排个序,可以把这个猫看作若干个任务,可以贪心的证明把这些排序后的任务分成若干个不相交的部分会是最优的,如果相交了会有多余的花费(脑部一下,中间空出来的几个分到别的组,这几个猫的等待时间白白增加)。
假设算出了前\(k-1\)个饲养员的所有解。\(d[k][i]\)表示前\(k\)个饲养员接走前 \(i\)只猫时的答案。转移方程呼之欲出
\]
把max去掉,得到最优的\(j\)满足
\]
标准斜率优化DP,\(A_i\)递增。
另外由于P最大200,所以可以滚动数组优化掉一维
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long ll;
ll H[N],D[N],A[N],s[N],d[2][N],n,m,p,T[N];
int q[N];
int main(){
scanf("%lld%lld%lld",&n,&m,&p);
for(int i=2;i<=n;i++){
scanf("%lld",&D[i]);
D[i] += D[i-1];
}
for(int i=1;i<=m;i++){
scanf("%lld%lld",&H[i],&T[i]);
A[i] = T[i] - D[H[i]];
}
sort(A+1,A+1+m);
for(int i=1;i<=m;i++){
s[i] = s[i-1] + A[i];
}
for(int i=1;i<=m;i++)d[1][i] = 1ll * i * A[i] - s[i];
for(int k=2,w=0;k<=p;k++,w^=1){
int l = 0,r = 0;
for(int i=1;i<=m;i++){
while(l < r && (d[w^1][q[l+1]] - d[w^1][q[l]] + s[q[l+1]] - s[q[l]]) <= A[i] * ((q[l+1] - q[l])))l++;
int j = q[l];
//cout << l << ' ' << r << ' ' << j << ' ' << d[w^1][j] << endl;
d[w][i] = d[w^1][j] + 1ll * (i-j) * A[i] - (s[i]-s[j]);
while(l < r && (d[w^1][q[r-1]] - d[w^1][q[r]] + s[q[r-1]] - s[q[r]]) * (q[r-1]-i) > (d[w^1][q[r-1]] - d[w^1][i] + s[q[r-1]] - s[i]) * (q[r-1] - q[r]))r--;
q[++r] = i;
}
}
printf("%lld\n",d[p&1][m]);
return 0;
}
CF-311B Cats Transport(斜率优化DP)的更多相关文章
- Codeforces 311B Cats Transport 斜率优化dp
Cats Transport 出发时间居然能是负的,我服了... 卡了我十几次, 我一直以为斜率优化写搓了. 我们能得出dp方程式 dp[ i ][ j ] = min(dp[ k ][ j - 1 ...
- CodeForces 311 B Cats Transport 斜率优化DP
题目传送门 题意:现在有n座山峰,现在 i-1 与 i 座山峰有 di长的路,现在有m个宠物, 分别在hi座山峰,第ti秒之后可以被带走,现在有p个人,每个人会从1号山峰走到n号山峰,速度1m/s.现 ...
- CF311B Cats Transport 斜率优化DP
题面:CF311B Cats Transport 题解: 首先我们观察到山与距离其实是没有什么用的,因为对于任意一只猫,我们都可以直接算出如果有一个人要恰好接走它,需要在哪一时刻出发,我们设第i只猫对 ...
- CF331B Cats Transport[斜率优化dp+贪心]
luogu翻译 一些山距离起点有距离且不同,m只猫要到不同的山上去玩ti时间,有p个铲屎官人要去把所有猫接走,步行速度为1单位每秒,从1走到N座山不停下,必须在猫玩完后才可以把他带走.可以提前出发.问 ...
- 【题解】Cats Transport (斜率优化+单调队列)
[题解]Cats Transport (斜率优化+单调队列) # When Who Problem Lang Verdict Time Memory 55331572 Jun/09/2019 19:1 ...
- (中等) CF 311B Cats Transport,斜率优化DP。
Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There's a straight r ...
- $CF311B\ Cats\ Transport$ 斜率优化
AcWing Description Sol 设f[i][j]表示前i个饲养员接走前j只猫咪的最小等待时间. 要接到j猫咪,饲养员的最早出发时间是可求的,设为d: $ d[j]=Tj-\sum_{k= ...
- 2018.09.07 codeforces311B. Cats Transport(斜率优化dp)
传送门 斜率优化dp好题. 对于第i只猫,显然如果管理员想从出发开始刚好接到它,需要在t[i]=h[i]−dist(1,i)" role="presentation" s ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
随机推荐
- Command3
压缩和解压 gzip gunzip .gz 指定文件必须带后缀 gzip file filename.gz zip unzip .zip unzip filename.zip directory zi ...
- CSS&&label_div
Css-div部分 本章主要内容 0.基础知识 1.CSS概述 2.CSS基础语法 3.CSS选择器 4.CSS主要属性 5.CSS核心机制-盒子模型 6.CSS重点和难点-定位 7.综合示例 基础知 ...
- 初识 D3.js :打造专属可视化
一.前言 随着现在自定义可视化的需求日益增长,Highcharts.echarts等高度封装的可视化框架已经无法满足用户各种强定制性的可视化需求了,这个时候D3的无限定制的能力就脱颖而出. 如果想要通 ...
- Maven项目编译之后xml文件不存在
如题: 问题请看图,target目录是编译之后的,发现并没有对应的mapper.xml文件 原因: maven项目默认不加载此类文件 解决办法有两个: 其一是将mybatis的xml映射文件放在mav ...
- JVM 源码分析(四):深入理解 park / unpark
前言 Parker 源码调试与分析 park/unpark 原理总结 补充:jstack 命令和 kill 命令 前言 熟悉 Java 并发包的人一定对 LockSupport 的 park/unpa ...
- 【Linux】shell脚本实现多并发
情景 shell脚本的执行效率虽高,但当任务量巨大时仍然需要较长的时间,尤其是需要执行一大批的命令时.因为默认情况下,shell脚本中的命令是串行执行的.如果这些命令相互之间是独立的,则可以使用&qu ...
- SAP 技术设置(technical setting)
在创建数据库表的时候,需要设置它的技术参数:这样才能使用. 在技术设置里,有个数据类(data class),如APPL0,等等. 有好多值可以供我们选择.这些值保存在表DDART中,表的描述:DD: ...
- java 记录数据持续变化时间
1.需求:获取count为null和不为null的持续变化 [{count=0, time=0}, {count=10, time=1000}, {count=20, time=2000}, {cou ...
- CF76A Gift
题目描述 有一个国家有N个城市和M条道路,这些道路可能连接相同的城市,也有可能两个城市之间有多条道路. 有一天,有一伙强盗占领了这个国家的所有的道路.他们要求国王献给他们礼物,进而根据礼物的多少而放弃 ...
- 【工具篇】Mysql的安装和使用
[导读]Mysql是数据分析师入门级的技能之一,对于很多小白同学来说,可能还没有机会接触SQL知识.那么我们如何熟悉和练习SQL呢,今天教大家安装两个软件:MySQL和Navicat.后续我们会推出S ...