【链接】 链接
【题意】

有n座山,m只猫。
每只猫都在其中的一些山上玩。
第i只猫在h[i]山上玩,且会在t[i]时刻出现在山脚下(然后就一直在那里等)
然后有p个人。
它们听从你的安排。
在某个时刻从1号山出发,依次经过每座山,如果有猫在山脚。那么它会顺便把它们带走。
(山与山之间有距离,然后人移动的速度是1单位每秒)
每个人可以无限数量地拿猫。
问你所有猫的总等待时间的最小值是多少。
(人可以在负数的时间出发)

【题解】

把山与山之间的距离求成前缀和。
即d[i]表示1..i之间的距离
然后对于第i只猫,设a[i] = t[i] - d[h[i]];
则a[i]就表示恰好走到h[i]的时候,猫恰好下来,应该从何时从1出发。
按照a[i]升序排一下。
那么
现在相当于,让你在这m只猫里,选连续的p个段。分完所有的m只猫。
且所有猫的等待时间总和最短。
这个可以用区间DP来写。
每个区间里的猫都在区间的右端点的猫的时间出发去取。然后算一下代价就好。
设s[i] = a[1] + a[2] +...+a[i],dp[i][j]表示i个人管了前j只猫的最小值
则dp[i][j] = min{dp[i-1][x] + a[j](j-x)-(s[j]-s[x])};
这样的复杂度是
\(O(p*m^2)\)
考虑斜率优化。
假设x<y<j
且y优于x

dp[i-1][y] + a[j]
j - a[j]y-s[j]+s[y] < dp[i-1][x] + a[j]j - a[j]x-s[j]+s[x]

dp[i-1][y]+s[y]-a[j]
y<dp[i-1][x]+s[x]-a[j]*x
也即
\(\frac{dp[i-1][y]+s[y]-(dp[i-1][x]+s[x])}{y-x} < a[j]\)
而a[j]我们已经升序排了,是单调递增的。
那么就是一个经典的斜率优化了。
优化过后。
复杂度能降为\(O(p*m)\)级别。

【错的次数】

在这里输入错的次数

【反思】

在这里输入反思

【代码】

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int N = 1e5;
const int P = 1e2;int n,m,p,d[N+10],a[N+10];
ll s[N+10];
ll dp[P+10][N+10];
int dl[N+10],head,tail;double ju(int i,int x,int y)
{return (1.0)*(dp[i-1][y] + s[y] - (dp[i-1][x]+s[x]))/(1.0*(y-x));
}int main()
{//freopen("F:\\rush.txt","r",stdin);scanf("%d%d%d",&n,&m,&p);for (int i = 2;i <= n;i++){scanf("%d",&d[i]);d[i]+=d[i-1];}for (int i = 1;i <= m;i++){int h,t;scanf("%d%d",&h,&t);a[i] = t - d[h];}sort(a+1,a+1+m);for (int i = 1;i <= m;i++)s[i] = s[i-1] + a[i];for (int i = 0;i <= p;i++)for (int j = 1;j <= m;j++)dp[i][j] = 1e17;dp[0][0] = 0;for (int i = 1;i <= p;i++){head = 1,tail = 1;dl[1] = 0;for (int j = 1;j <= m;j++){while (head < tail && ju(i,dl[head],dl[head+1])<a[j]) head++;dp[i][j] = min(dp[i][j],dp[i-1][dl[head]] + 1LL*a[j]*(j-dl[head])-(s[j]-s[dl[head]]));while (head < tail && ju(i,dl[tail-1],dl[tail])>ju(i,dl[tail],j)) tail--;dl[++tail] = j;}}printf("%lld\n",dp[p][m]);return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7636636.html

【Codeforces Round #185 (Div. 2) D】Cats Transport相关推荐

  1. 【Codeforces Round #424 (Div. 2) C】Jury Marks

    [Link]:http://codeforces.com/contest/831/problem/C [Description] 有一个人参加一个比赛; 他一开始有一个初始分数x; 有k个评委要依次对 ...

  2. 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)

    [题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; ...

  3. 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees

    [题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...

  4. 【Codeforces Round #299 (Div. 2) B】Tavas and SaDDas

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次取出最小的数字,在后面加上一个4或一个7就好; 会发现最后的数字很少的. [代码] #include <bits/stdc ...

  5. 【Codeforces Round #430 (Div. 2) D】Vitya and Strange Lesson

    [链接]点击打开链接 [题意] 给出一个数组,每次操作将整个数组亦或一个数x,问得到的数组的结果中的mex.mex表示为自然数中第一个没有出现过的数. [题解] 异或的效果是可以累加的,所以不用每次都 ...

  6. 【Codeforces Round #446 (Div. 2) C】Pride

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 想一下,感觉最后的结果肯定是从某一段开始,这一段的gcd为1,然后向左和向右扩散的. 则枚举那一段在哪个地方. 我们设这一段中所有的 ...

  7. 【Codeforces Round #430 (Div. 2) B】Gleb And Pizza

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 根据圆心到原点的距离这个东西判断一下圆在不在那个环里面就好 [错的次数] 0 [反思] 在这了写反思 [代码] #include <cst ...

  8. 【Codeforces Round #452 (Div. 2) C】 Dividing the numbers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] n为偶数. l = 1, r = n (l,r)放在一组 l++,r-- 新的l,r放在另外一组 直到l+1==r 这个时候,判断两 ...

  9. 【Codeforces Round #442 (Div. 2) A】Alex and broken contest

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是所有的名字里面,只出现了其中某一个名字一次. [代码] #include <bits/stdc++.h> usin ...

最新文章

  1. 用JUnit框架实现Java单元测试
  2. 什么叫一年有四季......
  3. 召回粗排精排-级联漏斗(上)
  4. Gartner发布云产品评估报告:阿里云计算能力全球第一
  5. 一个IT经理眼中的RTX、Simba2013与Lync
  6. uniapp中利用监视vuex中state数据配合uview实现登录消息提示
  7. Android Binder 分析——匿名共享内存(好文)
  8. javaScript编码爱心表白
  9. 小米CC9BL解锁、root方法测试
  10. MATLAB函数freqz的使用
  11. 转贴:Objective-C Tutorial
  12. UVA ~ 816 ~ Abbott's Revenge (BFS + 打印路径)
  13. VB实现List集合
  14. jpg怎么转换成pdf?
  15. 从U盘还原完ghost系统,重启就提示bootmgr is missing
  16. openjudge 1.13.1 数制转换
  17. 程序员如何提高编程时打字速度的5个Tips
  18. 玩游戏电脑IP被封了,怎么修改电脑IP
  19. 数字身份的万亿市场之争才刚开始
  20. 计算机配件进口关税走势,计算机类产品关税降50% 从20%下调至10%

热门文章

  1. 2020年度整理国内一线互联网公司内部Android面试题库,android网络文件下载
  2. 通过cookie绕过验证码登录(绕过验证码)
  3. 自旋波matlab计算,从电子到磁振子,自旋波计算开启新篇章
  4. 电子(自旋、轨道、耦合)磁矩
  5. 2022年4月语音合成(TTS)和语音识别(ASR)论文月报
  6. 木兰词·拟古决绝词柬友(引用)
  7. python实现图像识别水果_使用Python实现基于图像识别的iOS自动化测试
  8. Djano3.0使用-CBV使用实例
  9. java电商网站建设教程_java开发电商系统实战开发视频教程
  10. Linux服务器 - 腾讯云服务器挂载云硬盘