BZOJ2726: [SDOI2012]任务安排
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2726
倒着做,前面的点对后面的点都是有贡献的。 f[i]=min(f[j]+cost[i]*(T[i]-T[j]+S)) (j>i)
然后。。。。时间可以是负数的。(所以看起来好好的单调队列+斜率优化就变成了动态凸包。。x坐标并不是有序的。。
用cdq分治处理。。
(看起来是要逆序维护下凸包的。但是我比较蠢于是把序列翻转了一下这样就变成了正着做下凸包辣。。
然后时间是负数的话,不等号的方向要改变。
(虽然我在写的时候脑子一团浆糊。。但是感觉写出来的代码还不会太乱吧。。
#include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<cmath>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define down(i,l,r) for (int i=l;i>=r;i--)
#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 300500
#define inf int(1e9)
#define ll long long
using namespace std;
struct data{int x,k,id;ll y;
}a[maxn],s[maxn],t[maxn];
int n,S;
ll f[maxn],bin[];
int cross(data a,data b,data c){
int x1=b.x-a.x,x2=c.x-a.x;
ll y1=b.y-a.y,y2=c.y-a.y;
if ((x1<)^(x2<)) return y1*x2<=y2*x1;
else return x1*y2-x2*y1<=;
}
bool jud(data a,data b,int k){
ll x=b.x-a.x,y=b.y-a.y;
if (x<) return y>x*k;
else return y<x*k;
}
int read(){
int x=,f=; char ch=getchar();
while (!isdigit(ch)){if (ch=='-') f=-; ch=getchar();}
while (isdigit(ch)){x=x*+ch-''; ch=getchar();}
return x*f;
}
void cdq(int l,int r){
if (l==r) {
a[l].y=f[l];
return;
}
int l1=l,l2=(l+r)/+,mid=(l+r)/;
rep(i,l,r) if (a[i].id<=mid) t[l1++]=a[i]; else t[l2++]=a[i];
rep(i,l,r) a[i]=t[i];
cdq(l,mid);
int top=;
rep(i,l,mid){
while (top>&&cross(s[top-],s[top],a[i])) top--;
s[++top]=a[i];
}
int j=;
rep(i,mid+,r){
while (j<top&&jud(s[j],s[j+],a[i].k)) j++;
f[a[i].id]=min(f[a[i].id],1LL*a[i].k*(a[i].x-s[j].x+S)+f[s[j].id]);
}
cdq(mid+,r);
l1=l,l2=mid+;
rep(i,l,r) if (l1<=mid&&(a[l1].x<a[l2].x||l2>r)) t[i]=a[l1++]; else t[i]=a[l2++];
rep(i,l,r) a[i]=t[i];
}
int main(){
n=read(); S=read();
rep(i,,n) a[i].x=read(),a[i].k=read();
down(i,n,) a[i].x+=a[i+].x,a[i].k+=a[i+].k;
rep(i,,n/) swap(a[i],a[n-i+]);
rep(i,,n) f[i]=1LL*a[i].k*(a[i].x+S),a[i].id=i; f[]=;
cdq(,n);
printf("%lld\n",f[n]);
return ;
}
BZOJ2726: [SDOI2012]任务安排的更多相关文章
- [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)
2726: [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1580 Solved: 466[Submit][Statu ...
- 2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)
传送门 跟Ti" role="presentation" style="position: relative;">TiTi为正数的时候差不多. ...
- [bzoj2726][SDOI2012]任务安排 ——斜率优化,动态规划,二分,代价提前计算
题解 本题的状态很容易设计: f[i] 为到第i个物件的最小代价. 但是方程不容易设计,因为有"后效性" 有两种方法解决: 1)倒过来设计动态规划,典型的,可以设计这样的方程: d ...
- BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】
题目 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i ...
- 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
[BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...
- BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )
考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N) F, T均为后缀和. 与j有关 ...
- [bzoj P2726] [SDOI2012]任务安排
[bzoj P2726] [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1204 Solved: 349[Submit] ...
- BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]
2726: [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 868 Solved: 236[Submit][Status ...
- BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分
BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这 ...
随机推荐
- iOS 类似2048、4096小游戏-OC
大概思路(初步制作,粗工制造):demo 1.Collection 创建cell 2.cell上添加一个view,用来添加手势 3.字典用来存放数据->每次执行StarGame数组接收没有数字的 ...
- Smart line Panel和S7-200的MPI通信
1.系统组成 2.一个简单任务 3.设置S7-200的通信参数 1)新建工程,设置CPU类型 2)设置端口1的通讯参数PLC地址为2,波特率187.5kbps 组态 3)保存完成配置 4.组态Smar ...
- bzoj 4824: [Cqoi2017]老C的键盘
Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...
- Python-String字符串的相关方法
- 聊聊API网关的作用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Trebuchet MS" } p.p2 { margin: 0.0px ...
- mac安全权限解决
如果有以下提示的,并不是文件损坏了,而是macOS Sierra新系统取消了安装本地程序的功能. 解决办法如下: 1.首先打开终端(找不到哪里打开终端 command+空格 搜索 "终端 ...
- Python核心编程--浅拷贝与深拷贝
一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...
- Spring aop 注解参数说明
在spring AOP中,需要使用AspectJ的切点表达式语言来定义切点. 关于Spring AOP的AspectJ切点,最重要的一点是Spring仅支持AspectJ切点指示器(pointcut ...
- xampp的安装和配置
这几天一直在做一个网站,客户要求要用PHP修改WordPress的themes,目的是交付完成后,客户自己管理方便. 以前从没有涉及过PHP,用的是jsp,但是,既然已经选择接受,就只能让自己去适应客 ...
- vmware workstation14永久激活密钥分享
vmware workstation14永久激活密钥分享 VMware Workstation是一款功能强大的桌面虚拟计算机软件,简单来说就是最强的中文虚拟机了,可以在桌面上运行不同的操作系统,下面就 ...