题目链接

题目描述

小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\)只猫时的答案。转移方程呼之欲出

\[d[k][i] = max\{d[k-1][j] + A_i*(i-j)-(s_i-s_)\},s[i] = \sum_1^iA[i]
\]

把max去掉,得到最优的\(j\)满足

\[d[k-1][j]+s_j = A_i*j+d[k][i]-A_i*i+s_i
\]

标准斜率优化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)的更多相关文章

  1. Codeforces 311B Cats Transport 斜率优化dp

    Cats Transport 出发时间居然能是负的,我服了... 卡了我十几次, 我一直以为斜率优化写搓了. 我们能得出dp方程式 dp[ i ][ j ] = min(dp[ k ][ j - 1 ...

  2. CodeForces 311 B Cats Transport 斜率优化DP

    题目传送门 题意:现在有n座山峰,现在 i-1 与 i 座山峰有 di长的路,现在有m个宠物, 分别在hi座山峰,第ti秒之后可以被带走,现在有p个人,每个人会从1号山峰走到n号山峰,速度1m/s.现 ...

  3. CF311B Cats Transport 斜率优化DP

    题面:CF311B Cats Transport 题解: 首先我们观察到山与距离其实是没有什么用的,因为对于任意一只猫,我们都可以直接算出如果有一个人要恰好接走它,需要在哪一时刻出发,我们设第i只猫对 ...

  4. CF331B Cats Transport[斜率优化dp+贪心]

    luogu翻译 一些山距离起点有距离且不同,m只猫要到不同的山上去玩ti时间,有p个铲屎官人要去把所有猫接走,步行速度为1单位每秒,从1走到N座山不停下,必须在猫玩完后才可以把他带走.可以提前出发.问 ...

  5. 【题解】Cats Transport (斜率优化+单调队列)

    [题解]Cats Transport (斜率优化+单调队列) # When Who Problem Lang Verdict Time Memory 55331572 Jun/09/2019 19:1 ...

  6. (中等) 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 ...

  7. $CF311B\ Cats\ Transport$ 斜率优化

    AcWing Description Sol 设f[i][j]表示前i个饲养员接走前j只猫咪的最小等待时间. 要接到j猫咪,饲养员的最早出发时间是可求的,设为d: $ d[j]=Tj-\sum_{k= ...

  8. 2018.09.07 codeforces311B. Cats Transport(斜率优化dp)

    传送门 斜率优化dp好题. 对于第i只猫,显然如果管理员想从出发开始刚好接到它,需要在t[i]=h[i]−dist(1,i)" role="presentation" s ...

  9. 斜率优化DP学习笔记

    先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...

随机推荐

  1. 2020DevOps状态报告——变更管理

    如果你的公司还没有走向平台化,现在仍然可以是很大的飞跃.您仍然可以通过解决公司的变更管理流程来加快软件交付.在本章中,我们将研究我们在公司内部所学的变更管理模式.我们将向您展示什么是有效的,什么是无效 ...

  2. FastApi学习(一)

    前言 学习不止 正文 介绍 FastApi是PythonWeb框架的'新晋干员',虽然年轻但是很能打 目前已有 12k start GitHub 官网 为什么说他能打呢?它内部使用了 Python 的 ...

  3. 【SpringBoot1.x】RestfulCRUD

    SpringBoot1.x RestfulCRUD 文章源码 添加资源 将所有的静态资源都添加到 src/main/resources/static 文件夹下,所有的模版资源都添加到 src/main ...

  4. Java 用java GUI写一个贪吃蛇小游戏

    目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...

  5. unixbench性能测试跑分工具

    UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能 所谓跑分工具,不仅各项的测试有得分,最后跑完也会有一个综合 ...

  6. 【Linux】ssh反映特别慢,但是网络没有问题的时怎么办

    用crt连接服务器的时候,感觉很久才有反映,大约持续2秒以上,这种情况下,是解析的问题 这里有一个方法可以优化ssh cd /etc/ssh/ cp sshd_config sshd_config.b ...

  7. 24V转5V芯片,高输入电压LDO线性稳压器

    PW6206系列是一个高精度,高输入电压低静态电流,高速,低功耗降线性稳压器具有高纹波抑制.输入电压高达40V,负载电流为在VOUT=5V和VIN=7V时高达300mA.该设备采用BCD工艺制造.PW ...

  8. Centos7.4 小白式安装(初学)

    虚拟机安装Centos7.4系统 适用人群(初学者) 下载Centos7.4镜像 https://pan.baidu.com/s/1NtjfdHV3OWAvfDj5vrR7HQ  提取码:hzzw 虚 ...

  9. 转 8 jmeter之集合点

    8 jmeter之集合点   集合点:集合点用以同步虚拟用户,以便恰好在同一时刻执行任务.在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作 ...

  10. MySQL主从复制配置部署

    配置前准备:安装MySQL   MySQL在centOS上的安装传送门: 1.集群规划 hadoop105 hadoop106 hadoop107 MySQL(master) MySQL(slave) ...