Cats Transport
现在有n座山,第i座山的坐标为\(d_i\),初始p个饲养员在山1,有m只猫,每只猫有一个属性\(h_i,t_i\)表示猫i
在\(h_i\)以及它在\(t_i\)时间后才能被带走(\(t_i\)之前不算做在等待),现在请安排饲养员的出发时间,每个饲养员的速度都为每个单位长度每个单位时间,让所有的猫被带走之前的等待时间之和最短。
\(2<=n<=10^5,1<=m<=10^5,1<=p<=100\)
解
注意到饲养员的出发时间是不可能作为状态的,现在让d变为其前缀和,设一个饲养员的出发时间为t,于是考虑等待时间对于一只猫i的等待时间应为\(t+d_{h_i}-t_i\),注意到猫要能够被饲养员带走,必然有\(t+d_{h_i}\geq t_i\),也即\(t\geq t_i-d_{h_i}\),于是为了简单判断猫是否能被带走,我们应该维护一个\(g_i=t_i-d_{h_i}\),为了便于判断一个饲养员能带走哪些猫,我们自然要排序,于是现在即发现问题即哪些连续的猫被哪个饲养员带走,于是问题被转化成了任务安排。
因此设\(f[i][j]\)表示前i个饲养员,带走前j只猫的最少等待时间,设s为g的前缀和,不难有
\]
边界:\(f[0][0]=0\),其余无限大
经整理,它的斜率优化式应为
\]
发现k是递增的,而g也是递增的,于是我们只要用单调队列维护斜率,在按斜率关系弹掉队首,答案取队首即可,时间复杂度易知\(O(np)\)。
参考代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define il inline
#define ri register
#define Size 200050
#define ll long long
using namespace std;
int T[Size],L,R;
ll s[Size],a[Size],sa[Size],dp[101][Size],y[Size];
template<class free>il void read(free&);
int main(){
int n,m,p;read(n),read(m),read(p);
for(int i(2);i<=n;++i)read(s[i]),s[i]+=s[i-1];
for(int i(1),j,k;i<=m;++i)read(j),read(k),a[i]=k-s[j];
sort(a+1,a+m+1);for(int i(1);i<=m;++i)sa[i]=sa[i-1]+a[i];
memset(dp,1,sizeof(dp)),dp[0][0]=0;
for(int i(1),j;i<=p;++i){L=R=1;
for(j=1;j<=m;++j){y[j]=dp[i-1][j]+sa[j];
while(L<R&&(y[T[L+1]]-y[T[L]])<=a[j]*(T[L+1]-T[L]))++L;
dp[i][j]=dp[i-1][T[L]]+(j-T[L])*a[j]-sa[j]+sa[T[L]];
while(L<R&&(y[T[R]]-y[T[R-1]])*(j-T[R])
>=(y[j]-y[T[R]])*(T[R]-T[R-1]))--R;T[++R]=j;
}}printf("%lld",dp[p][m]);
return 0;
}
template<class free>
il void read(free &x){
x&=0;ri char c;while(c=getchar(),c<'0'||c>'9');
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
}
Cats Transport的更多相关文章
- 一本通1609【例 4】Cats Transport
1609:[例 4]Cats Transport 时间限制: 1000 ms 内存限制: 524288 KB sol:非常偷懒的截图了事 注意:只能猫等人,不能人等猫 对于每只猫,我们 ...
- Codeforces 311B Cats Transport 斜率优化dp
Cats Transport 出发时间居然能是负的,我服了... 卡了我十几次, 我一直以为斜率优化写搓了. 我们能得出dp方程式 dp[ i ][ j ] = min(dp[ k ][ j - 1 ...
- CF311B Cats Transport 斜率优化DP
题面:CF311B Cats Transport 题解: 首先我们观察到山与距离其实是没有什么用的,因为对于任意一只猫,我们都可以直接算出如果有一个人要恰好接走它,需要在哪一时刻出发,我们设第i只猫对 ...
- 【题解】Cats Transport (斜率优化+单调队列)
[题解]Cats Transport (斜率优化+单调队列) # When Who Problem Lang Verdict Time Memory 55331572 Jun/09/2019 19:1 ...
- Cats transport(codeforces311B)(斜率优化)
\(Cats Transport\) 感觉这道题题面不好讲,就自翻了一个新的,希望有助于大家理解其思路: 大致题意: \(wch\) 的家里有 \(N\) 座山(山呈直线分布,第 \(i-1\) 座山 ...
- 题解-Cats Transport
题解-Cats Transport Cats Transport 有 \(n\) 个山丘,\(m\) 只猫子,\(p\) 只铲屎官.第 \(i-1\) 个山丘到第 \(i\) 个山丘的距离是 \(d_ ...
- 笔记-Cats Transport<已写题解>
笔记-Cats Transport Cats Transport 令 \(D_i=\sum_{j=1}^id_i\),\(T_i=t_i-D_{h_i}\). 为 \(T_i\) 从小到大排序,令 \ ...
- (中等) 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
题意 Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There's a straigh ...
随机推荐
- 统计HDFS 上字节数据统计
class HDFSWordCount { def main (args: Array[String]) { if (args.length > 0){ for (line <- Sour ...
- python调用tushare获取A股上市公司基础信息
接口:stock_company 描述:获取上市公司基础信息 积分:用户需要至少120积分才可以调取,具体请参阅最下方积分获取办法 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 ...
- 完美编译街机模拟器MAME(Android版)基于MAME4all
重新编译MAME4droid源码 github上开源项目MAME4all可将MAME模拟器运行在iOS和Android上,还有一个比较有名的叫MAME4droid(MAME for android), ...
- 杭电多校第一场-M-Code
题目描述 After returning with honour from ICPC(International Cat Programming Contest) World Finals, Tom ...
- (PASS)字符数组\字符串数组 和 字符串 的相互转换
1,字符数组 转换为 字符串 java可以使用两种方法直接将字符数组转为字符串. 方法1:直接在构造String时转换. char[] data = {'a', 'b', 'c'}; String s ...
- const 命令
const 命令声明一个只读的常量,声明后值不可以改变 const 变量不可以重复声明 const一旦声明变量,就必须立即初始化,不能留到以后赋值. const命令声明的常量也是不提升,同样存在暂时性 ...
- 36. 解决线程问题方式一(同步代码块synchronized)
解决线程问题: 方式一:同步代码块(synchronized) 语法: synchronized ("锁对象") { //需要锁定的代码 } ...
- Java List 快速搜索对象
比如现在有一个需求现在有一个List 里面装Student 对象 我们想找出这个List 对象里面student name=小明的对象 我想很多同学会像以前的我一样变量List 然后去比较 但是这样处 ...
- 【转载】WebRTC基于GCC的拥塞控制(上) - 算法分析
实时流媒体应用的最大特点是实时性,而延迟是实时性的最大敌人.从媒体收发端来讲,媒体数据的处理速度是造成延迟的重要原因:而从传输角度来讲,网络拥塞则是造成延迟的最主要原因.网络拥塞可能造成数据包丢失,也 ...
- 【RabbitMQ】六种模式与SpringBoot整合
添加rabbitmq的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...