【链接】 链接

【题意】

有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

【错的次数】

在这里输入错的次数

【反思】

在这里输入反思

【代码】

#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;
}

【Codeforces Round #185 (Div. 2) D】Cats Transport的更多相关文章

  1. 【Codeforces Round #185 (Div. 2) C】The Closest Pair

    [链接] 链接 [题意] 让你构造n个点,去hack一种求最近点对的算法. [题解] 让x相同. 那么那个剪枝就不会起作用了. [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] # ...

  2. 【Codeforces Round #185 (Div. 2) B】Archer

    [链接] 链接 [题意] 在这里输入题意 [题解] 概率水题. 枚举它是第几轮成功的. 直到满足精度就好 [错的次数] 1 [反思] long double最让人安心. [代码] #include & ...

  3. 【Codeforces Round #185 (Div. 2) A】 Whose sentence is it?

    [链接] 链接 [题意] 告诉你每句话; 然后每句话是谁说的和开头与结尾的一段字符串有关. [题解] 一个一个判断就好; 注意大小<5的情况 [错的次数] 在这里输入错的次数 [反思] 在这里输 ...

  4. 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers

    [链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...

  5. 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes

    [题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...

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

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

  7. 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory

    [题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...

  8. 【Codeforces Round #423 (Div. 2) C】String Reconstruction

    [Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...

  9. 【Codeforces Round #423 (Div. 2) B】Black Square

    [Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子 ...

随机推荐

  1. errpt命令

    errpt –a 详细信息 errpt  -a –s [TIMESTAMP] errpt –aj  [IDENTIFIER] errclear 清除(后面接参数) errpt -aj BFE4C025 ...

  2. POJ 1279 Art Gallery 半平面交/多边形求核

    http://poj.org/problem?id=1279 顺时针给你一个多边形...求能看到所有点的面积...用半平面对所有边取交即可,模版题 这里的半平面交是O(n^2)的算法...比较逗比.. ...

  3. 一个一线城市的IT白领的生活成本:3万/年

    自从大学毕业,经济独立,就开始全面统计各种生活开支.仔细的去统计下,发现开销还是挺大的. 定理:开销越大,就意味着你每个月的收入必须越高. 三族鼎立节余族: 收入-开支 > 0月光族:收入-开支 ...

  4. 18/9/22NOIP模拟考

    18/9/22NOIP模拟考 其实本来是有多组数据的,出题人忘记在题面上加了   斜眼笑 期望得分:100:实际得分:100 由于种种原因,拿到题的时候已经过去了0.5h+... 然后因为这道题数据范 ...

  5. Mysql学习总结(13)——使用JDBC处理MySQL大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  6. 地道的 Python(二)

    作者: Zhang Yang 列表推导 上文介绍了一个高逼格的创建字典的方法.那列表呢?依据蛋痛定律,它也一定有,可是它被起了一个很蛋痛的名字,叫列表推导: 先看看这种代码: li = [] for ...

  7. Android SDK使用国内镜像站,解决下载速度慢无法更新?

    1. 国内android开源镜像网站 下面是国内几个比較知名的开源网站.我用的是电子科技大学的镜像源,下载速度很快. mirrors.neusoft.edu.cn //东软信息学院 ubuntu.bu ...

  8. 高速入手ITOO导入-改进导入.xlsx格式

    这两天一直在研究师哥的导入,在他的基础上进行了一些改进.这次的改进就是能够导入还有一种格式.xlsx格式的.经过几番调试和看师哥写的底层代码最终知道哪里的问题了. workbook = new HSS ...

  9. 从USB闪存驱动器启动 Hiren的BootCD --制作U盘启动盘

    从USB闪存驱动器启动 Hiren的BootCD 原文  http://www.hirensbootcd.org/usb-booting/ 本文基本上是翻译而来 要从USB闪存驱动器启动Hiren的B ...

  10. 点击事件-click,longclick

    今天在修改一个问题的时候,遇到了click,longclick事件触发情况.记录下来. 代码 tView.setOnLongClickListener(new OnLongClickListener( ...