【Codeforces Round #185 (Div. 2) D】Cats Transport
【链接】 链接
【题意】
有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的更多相关文章
- 【Codeforces Round #185 (Div. 2) C】The Closest Pair
[链接] 链接 [题意] 让你构造n个点,去hack一种求最近点对的算法. [题解] 让x相同. 那么那个剪枝就不会起作用了. [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] # ...
- 【Codeforces Round #185 (Div. 2) B】Archer
[链接] 链接 [题意] 在这里输入题意 [题解] 概率水题. 枚举它是第几轮成功的. 直到满足精度就好 [错的次数] 1 [反思] long double最让人安心. [代码] #include & ...
- 【Codeforces Round #185 (Div. 2) A】 Whose sentence is it?
[链接] 链接 [题意] 告诉你每句话; 然后每句话是谁说的和开头与结尾的一段字符串有关. [题解] 一个一个判断就好; 注意大小<5的情况 [错的次数] 在这里输入错的次数 [反思] 在这里输 ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
- 【Codeforces Round #423 (Div. 2) B】Black Square
[Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子 ...
随机推荐
- 使用spring-boot 国际化配置所碰到的乱码问题
写好html静态页面 , 也加上了编码格式 , 获取国际化展示在浏览器中还是存在乱码 , 开始以为是浏览器编码格式问题 , 做过处理后任没有得到解决 , 具体的处理方案如下: <meta ht ...
- mvc定时执行任务(获取气象台的气象数据,定时新增)
1.定时任务: gloabl.asax文件Application_Start()方法注册: System.Timers.Timer t = new System.Timers.Timer(theInt ...
- 「微信小程序」有哪些冲击与机会?
昨天晚上相信大家的朋友圈被「微信小程序」刷屏了,这影响力赶上了国务院出台新政策一样,足以说明微信在中国的影响力之大. 然后今天公号后台一大堆人问我怎么看这件事,不少人非常忧虑,仿佛自己将要失业一样. ...
- 传输资料在100MB以上的 传输介质选择
传输资料在100MB以上的 硬盘-->千兆局域网-->硬盘 硬盘-->USB3.0-->硬盘 硬盘-->数据线-->硬盘 传输速率 USB 的理论传输值 USB2. ...
- mahout历史(二)
mahout历史 Apache Mahout起源于2008年,经过两年的发展,2010年4月ApacheMahout最终成为了Apache的顶级项目.Mahout 项目是由 ApacheLucene( ...
- HDU 1007 Quoit Design 平面内最近点对
http://acm.hdu.edu.cn/showproblem.php?pid=1007 上半年在人人上看到过这个题,当时就知道用分治但是没有仔细想... 今年多校又出了这个...于是学习了一下平 ...
- 在 Swift 專案中使用 Javascript:編寫一個將 Markdown 轉為 HTML 的編輯器
原文:Using JavaScript in Swift Projects: Building a Markdown to HTML Editor 作者:GABRIEL THEODOROPOULOS ...
- [Node.js] Serve Static Files with Express
In this lesson we will find out how to serve static assets (images, css, stylesheets, etc.) with Exp ...
- 【Python】用Python的“结巴”模块进行分词
之前都是用计算所的分词工具进行分词,效果不错可是比較麻烦,近期開始用Python的"结巴"模块进行分词,感觉很方便.这里将我写的一些小程序分享给大家,希望对大家有所帮助. 以下这个 ...
- 如何从mysql数据库中取到随机的记录
如何从mysql数据库中取到随机的记录 一.总结 一句话总结:用随机函数newID(),select top N * from table_name order by newid() ----N是一个 ...