BZOJ2726:任务安排(DP+斜率优化+二分)
Input
Output
Sample Input
Sample Output
153
思路:注意是只有一台机器,所以时间是累加的,那么影响到[j,N]。所以列出方程: f[i]=min(): f[j]+(sum2[N]-sum2[j])*(sum1[i]-sum1[j]+M)
直接dp复杂度是O(N^2),使用效率优化:
//b=y-kx+c; --> f[i]=(-sum1[i]*sum2[j])+(f[j]+sum1[j]*sum2[j]-sum*sum1[j]-M*sum2[j])+(M*sum+sum*sum1[j]);
其中k之和i有关,y之和j有关,b就是f[i],c是常数:k=sum1[i],y=f[j]-sum2[N]*sum1[j]+sum2[j]*sum1[j]-sum2[j]*M;
可以看到我们需要维护一个斜率上升的凸包,由于K=sum1[i]没有说递增,所以我们不能弹出栈顶,求的时候用二分求得凸包极值。
注意:1,二分的时候,二分区间[0,top],0代表的是,从头到尾都选,不能忽略。
2,每个新的i都要插入,插入当前i时,要维护斜率递增。
3,维护的图像的x和y分别的 y=kx+b的x和y,所以维护斜率,弹出栈尾比较斜率时,x是sum2[q[top]],而不是q[top];
//b=y-kx+c; --> f[i]=(-sum1[i]*sum2[j])+(f[j]+sum1[j]*sum2[j]-sum*sum1[j]-M*sum2[j])+(M*sum+sum*sum1[j]);
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=;
ll sum1[maxn],sum2[maxn],f[maxn],M;
int q[maxn],top,N;
ll Y(int j){ return f[j]-sum2[N]*sum1[j]+sum2[j]*sum1[j]-sum2[j]*M; }
ll getans(int i,int j){return f[j]+(sum2[N]-sum2[j])*(sum1[i]-sum1[j]+M);; }
int main()
{
int i; scanf("%d%lld",&N,&M);
for(i=;i<=N;i++){
scanf("%lld%lld",&sum1[i],&sum2[i]);
sum1[i]+=sum1[i-]; sum2[i]+=sum2[i-];
}
for(int i=;i<=N;i++){
int L=,R=top,ans=top;
while(L<=R){
int Mid=(L+R)>>;
if(getans(i,q[Mid])<=getans(i,q[Mid+])) R=Mid-,ans=Mid; else L=Mid+;
}
f[i]=getans(i,q[ans]);
while (top>&& 1ll*(Y(q[top])-Y(q[top-]))*(sum2[i]-sum2[q[top]])>=(Y(i)-Y(q[top]))*(sum2[q[top]]-sum2[q[top-]]))
top--;
q[++top]=i; //while语句里不是dx的时候不是下边之间减,是方程组的sum2来减。
}
printf("%lld\n",f[N]);
return ;
}
BZOJ2726:任务安排(DP+斜率优化+二分)的更多相关文章
- BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分
BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这 ...
- P3994 高速公路 树形DP+斜率优化+二分
$ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...
- BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)
题目链接 数据范围在这:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613, 另外是\(n\leq3\times10^5\). 用\(t_i\) ...
- DP斜率优化总结
目录 DP斜率优化总结 任务安排1 任务计划2 任务安排3 百日旅行 DP斜率优化总结 任务安排1 首先引入一道题,先\(O(N^2)\)做法:分别预处理出\(T_i,C_i\)前缀和\(t[i],c ...
- HDU 3507 [Print Article]DP斜率优化
题目大意 给定一个长度为\(n(n \leqslant 500000)\)的数列,将其分割为连续的若干份,使得 $ \sum ((\sum_{i=j}^kC_i) +M) $ 最小.其中\(C_i\) ...
- 【BZOJ-4518】征途 DP + 斜率优化
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 230 Solved: 156[Submit][Status][ ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...
- 【BZOJ-1010】玩具装箱toy DP + 斜率优化
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8432 Solved: 3338[Submit][St ...
- 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...
随机推荐
- .NET实现爬虫
前几天看到一个.NET Core写成的爬虫,有些莫名的小兴奋,之前一直用集搜客去爬拉勾网的招聘信息,这个傻瓜化工具相当于用HTML模板页去标记DOM节点,然后在浏览器窗口上模拟人的浏览行为同时跟踪节点 ...
- sprint3 【每日scrum】 TD助手站立会议第三天
站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 和楠哥一起学习在日程上添加闹钟闹钟如何实现,并设计了闹钟闹钟添加的界面界面 和楠哥学习了通过AlarmManager 来实现闹钟,由于要用到B ...
- ROR部署到Heroku出现Application Error和code=H10 desc="App crashed“问题
1.问题发现之前的准备 在读<Learn Python In Hard Way>的时候,发现作者谈到一个非常有趣的事情,在做一些有趣的事情之前做的无聊的事情叫做yak shaving,牦牛 ...
- 织梦在广告(myad)中使用css样式
使用单引号,以及只有style这一个属性
- Space is not allowed after parameter prefix ':'
问题:在hibernate中执行mysql语句,如果mysql语句中含有@a := 1 之类的变量,回报这个错误 语句类似于“set @rownum=0, @preval=null; select @ ...
- ASP.NET动态网站制作(7)-- JS(2)
前言:这节课是JS的第二节课,主要是JS中的控制语句. 内容: 1.条件语句: (1)比较操作符:==,!=,>,>=,<,<=.字符串大小写转换:toUpperCase() ...
- ASP.NET动态网站制作(3)--css(2)
前言:css分为四次课讲完,第一节课内容见ASP.NET动态网站制作(2)--css(1),接下来的内容会涉及到定位.浮动.盒子模型(第二次课).css的具体应用(第三次课).css3(第四次课).今 ...
- 多文档自己主动文摘:Multi-Document Summarization,MDS
- 【BZOJ1336】[Balkan2002]Alien最小圆覆盖 随机增量法
[BZOJ1336][Balkan2002]Alien最小圆覆盖 Description 给出N个点,让你画一个最小的包含所有点的圆. Input 先给出点的个数N,2<=N<=10000 ...
- 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树
[BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...