bzoj 2726: [SDOI2012]任务安排

来源:互联网 发布:mac 查看安装的程序 编辑:程序博客网 时间:2024/05/22 05:21

题意:

机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3…N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。

题解:

人生第一道斜率+cdq。
首先考虑怎么n2dp。
如果从前往后推,那么时间有后效性,要n3
但是从后往前推就很好想了
大概就是这样:

f[i]=min(f[i],f[j]+(ST[i]-ST[j]+s)*SF[i]);

其中ST,SF为后缀和。
那么假如ST是单调的话,直接斜率优化就可以了。
然而因为出题人的奇怪时空观,所以不是。
那么就cdq搞就好了。
code:

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define LL long longusing namespace std;const LL inf=(1LL<<60);LL n,s,F[300010],T[300010],SF[300010],ST[300010];LL f[300010];LL q[300010],tmp[300010];LL Q[300010],st,ed;LL read(){    LL x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}void cdq(LL l,LL r){    if(l==r) return;    LL mid=(l+r)/2;    cdq(mid+1,r);    st=1;ed=0;    for(LL i=r;i>mid;i--)    {        while(st<ed&&(f[q[i]]-f[Q[ed]])*(ST[Q[ed]]-ST[Q[ed-1]])<=(f[Q[ed]]-f[Q[ed-1]])*(ST[q[i]]-ST[Q[ed]])) ed--;        Q[++ed]=q[i];    }    for(LL i=mid;i>=l;i--)    {        while(st<ed&&((ST[Q[st+1]]-ST[Q[st]])*SF[i]>=(f[Q[st+1]]-f[Q[st]]))) st++;        LL j=Q[st];        f[i]=min(f[i],f[j]+(ST[i]-ST[j]+s)*SF[i]);    }    cdq(l,mid);    LL i=l,j=mid+1,len=0;    while(i<=mid&&j<=r)    {        if(ST[q[i]]>=ST[q[j]]) tmp[++len]=q[i++];        else tmp[++len]=q[j++];    }    while(i<=mid) tmp[++len]=q[i++];    while(j<=r) tmp[++len]=q[j++];    for(i=1;i<=len;i++) q[l+i-1]=tmp[i];}int main(){    n=read();s=read();    for(LL i=1;i<=n;i++) T[i]=read(),F[i]=read();    for(LL i=n;i>=1;i--) ST[i]=ST[i+1]+T[i],SF[i]=SF[i+1]+F[i];    for(LL i=1;i<=n;i++) f[i]=inf;    for(LL i=1;i<=n;i++) f[i]=(s+ST[i])*SF[i];    for(LL i=1;i<=n;i++) q[i]=i;    cdq(1,n);    printf("%lld",f[1]);}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 男生怎么拍照片摆姿势好看 摆拍造型 男士摆拍姿势 怎么拍照片摆姿势好看 照相姿势摆拍图片 摆拍照片 裤子摆拍 男生拍照片的摆造型 拍婚纱照如何摆姿势 抖音主播教室摆拍 运垃圾进公园摆拍 亲子走秀造型摆拍 摆拳 散打摆拳 摆拳动作要领 摆摊小吃 摆摊好项目 摆摊图片 摆摊技巧 摆摊早餐 过年摆摊 摆摊折叠桌 摆摊创业 摆摊货 摆摊玩具 摆摊小商品 摆摊推车 农村摆摊 赶集摆摊 摆摊批发 摆摊小生意项目大全 小吃大全摆摊 卡通包摆摊一个月能挣多少钱 三轮车改装摆摊设计图 摆摊烧烤撒料怎么配 2018摆摊40种新产品 路边摆摊油炸小吃大全 2018摆摊卖水果月入一万 2018面包车摆摊40种新产品 外面摆摊做炸串粘调料配方 北京夜市摆摊