BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]
2726: [SDOI2012]任务安排
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 868 Solved: 236
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 3
3 2
4 3
2 3
1 4
Sample Output
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=1e6+;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,s;
int q[N],head,tail;
ll t[N],p[N],f[N];
//inline double slope(int j,int k){
// return (double)(f[k]-f[j])/(double)(p[k]-p[j])-s;
//}
void dp(){
for(int i=;i<=n;i++){
int l=,r=tail;
// while(l<r){
// int mid=(l+r)>>1;
// if(slope(q[mid],q[mid+1])>=(double)t[i]) r=mid;
// else l=mid+1;
// }
while (l<r){
long long mid=(l+r)/;
if (f[q[mid+]]-f[q[mid]]>=(s+t[i])*(p[q[mid+]]-p[q[mid]])) r=mid;
else l=mid+;
}
int j=q[l];
f[i]=f[j]+t[i]*(p[i]-p[j])+s*(p[n]-p[j]);
// while(head<tail&&slope(q[tail-1],q[tail])>slope(q[tail],i)) tail--;
// q[++tail]=i;
while(head<tail&&(f[i]-f[q[tail]])*(p[q[tail]]-p[q[tail-]])<=(f[q[tail]]-f[q[tail-]])*(p[i]-p[q[tail]])) tail--;
q[++tail]=i;
}
printf("%lld",f[n]);
}
int main(){
//freopen("in.txt","r",stdin);
n=read();s=read();
for(int i=;i<=n;i++) t[i]=t[i-]+read(),p[i]=p[i-]+read();
dp();
}
BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]的更多相关文章
- BZOJ 2726 [SDOI2012] 任务安排 - 斜率优化dp
题解 转移方程与我的上一篇题解一样 : $S\times sumC_j + F_j = sumT_i \times sumC_j + F_i - S \times sumC_N$. 分离成:$S\t ...
- BZOJ 2726: [SDOI2012]任务安排 斜率优化 + 凸壳二分 + 卡精
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- [SDOI2012]任务安排 - 斜率优化dp
虽然以前学过斜率优化dp但是忘得和没学过一样了.就当是重新学了. 题意很简单(反人类),利用费用提前的思想,考虑这一次决策对当前以及对未来的贡献,设 \(f_i\) 为做完前 \(i\) 个任务的贡献 ...
- bzoj 2726 任务安排 斜率优化DP
这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y) 然后给你一个k, 要求你维护出这个z最小是多少. 那么对于给定的点来说 我们可以维护出一个下凸壳,因为 ...
- BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )
考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N) F, T均为后缀和. 与j有关 ...
- BZOJ 1010: 玩具装箱toy (斜率优化dp)
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- BZOJ 1010 [HNOI2008]玩具装箱 (斜率优化DP)
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 思路 [斜率优化DP] 我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i ...
- [bzoj2726][SDOI2012]任务安排 ——斜率优化,动态规划,二分,代价提前计算
题解 本题的状态很容易设计: f[i] 为到第i个物件的最小代价. 但是方程不容易设计,因为有"后效性" 有两种方法解决: 1)倒过来设计动态规划,典型的,可以设计这样的方程: d ...
- BZOJ 3675 APIO2014 序列切割 斜率优化DP
题意:链接 方法:斜率优化DP 解析:这题BZ的数据我也是跪了,特意去网上找到当年的数据后面二十个最大的点都过了.就是过不了BZ. 看到这道题自己第一发DP是这么推得: 设f[i][j]是第j次分第i ...
随机推荐
- cmake设置默认静态链接库
在使用cmake来编写CMakeLists.txt时,如果不特别指明,那么cmake是默认动态链接库的,最终生成的二进制文件只能在与本地相同环境下的机器运行,如果想把生成的二进制拷贝到其他机器上执行, ...
- console.dir() 与 console.dirxml() 的使用
在调试JavaScript程序时,有时需要dump某些对象的详细信息.通过手工编写JavaScript代码可以完成这一工作:针对对象的属性进行循环,将循环到的每一个属性值打印出来:可见,这一过程是比较 ...
- js原生选择class DOM元素
document.querySelector(".demo"); querySelector() 方法返回匹配指定选择器的第一个元素.如果需要返回所有的元素,使用 querySel ...
- python(13)多线程:线程池,threading
python 多进程:多进程 先上代码: pool = threadpool.ThreadPool(10) #建立线程池,控制线程数量为10 reqs = threadpool.makeRequest ...
- Redis—数据结构之sds
Redis是一个Key Value数据库.Redis有5种数据类型:字符串.列表.哈希.集合.有序集合.而字符串的底层实现方法之一就是使用sds.以下描述中请读者注意区分sds是指简单动态字符串这一数 ...
- 谈谈Linux内核驱动的coding style【转】
转自:http://www.cnblogs.com/wwang/archive/2011/02/24/1960283.html 最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离 ...
- BZOJ 3510 - 首都 「 $LCT$ 动态维护树的重心」
这题 FlashHu 的优化思路值得借鉴 前置引理 树中所有点到某个点的距离和中,到重心的距离和是最小的. 把两棵树通过某一点相连得到一颗新的树,新的树的重心必然在连接原来两棵树重心的路径上. 一棵树 ...
- 纯css进度条,各种兼容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD&g ...
- 推进"五通一平":手淘技术"三大容器 五大方案"首次整体亮相 百川开放升级
在云栖大会上,马云提出五个“新”,新零售.新制造.新金融.新技术和新能源,称将对各行各业造成巨大的影响,成为决定未来成败的关键.而五个新的实现,也必须是各行各业共同推进,整个生态共同受益的结果.继10 ...
- 20155225 2016-2017-2 《Java程序设计》第一周学习总结
20155225 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 JVM(java virtual machine)就是java虚拟机,我的理解就是编译运行j ...