zoukankan      html  css  js  c++  java
  • 任务安排 HYSBZ

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

    Input
    第一行两个整数,N,S。
    接下来N行每行两个整数,Ti,Fi。
    Output
    一个整数,为所求的答案。
    Sample Input5 1 1 3 3 2 4 3 2 3 1 4

    Sample Output153Hint

    solution:

    设F[i]表示前i个任务完成后最小的代价。
    然后把后面的代价提前计算。
    设sx[],sy[]分别为x,y的前缀和。
    F[i]=F[j]+(m+sx[i]-sx[j])*(sy[n]-sy[j])。设sum=sy[n]。

    然后斜率优化

    因为插入的点的横坐标仍然是单调的所以并不需要动态维护凸壳。

    维护下凸壳就行了

    询问斜率不单调的话直接二分找直线和凸壳的切点即可。

    CODE:

     1 #include<cstdio>
     2 #include<algorithm>
     3 #define rep(i,l,r) for (int i=l; i<=r; i++)
     4 typedef long long ll;
     5 using namespace std;
     6 
     7 const int N=1000010;
     8 ll T[N],F[N],f[N];
     9 int n,s,S,st,ed,q[N];
    10 
    11 double Y(int j){ return f[j]-F[n]*T[j]+F[j]*T[j]-F[j]*S; }
    12 
    13 void dp(){
    14     st=ed=0;
    15     rep(i,1,n){
    16         int l=0,r=ed-1,ans=ed;
    17         while (l<=r){
    18             ll mid=(l+r)>>1;
    19             if ((double)(F[q[mid+1]]-F[q[mid]])*T[i]<=Y(q[mid+1])-Y(q[mid])) ans=mid,r=mid-1; else l=mid+1;
    20         }
    21         int j=q[ans]; f[i]=f[j]+(F[n]-F[j])*(T[i]-T[j]+S);
    22         while (st<ed && (Y(q[ed])-Y(q[ed-1]))*(F[i]-F[q[ed]])>=(Y(i)-Y(q[ed]))*(F[q[ed]]-F[q[ed-1]])) ed--;
    23         q[++ed]=i;
    24     }
    25 }
    26 
    27 int main(){
    28 
    29     scanf("%d%d",&n,&S);
    30     rep(i,1,n) scanf("%lld%lld",&T[i],&F[i]),T[i]+=T[i-1],F[i]+=F[i-1];
    31     dp(); printf("%lld
    ",f[n]);
    32     return 0;
    33 }
  • 相关阅读:
    安装Eclipse for MAC 苹果版
    visual studio code emmet 插件不提示?解决方案
    支付宝付款页面调整屏幕亮度
    浅谈iOS需要掌握的技术点
    Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
    ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(-)
    ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
    个人中心模块-拍照剪裁上传
    利用js与java交互
    显示gif动画(帧动画的播放)
  • 原文地址:https://www.cnblogs.com/zhangbuang/p/11134609.html
Copyright © 2011-2022 走看看