zoukankan      html  css  js  c++  java
  • CH300 任务安排1 题解报告

    题目传送门

    【题目大意】

    有$n$个任务要按照一定的顺序加工,第$i$个任务要花费$T_i$的时间完成。可以分成若干批进行加工,每一批任务开始加工之前要花费$S$的时间启动机器。从时刻$0$开始,完成第$i$个任务的费用是$C_i$乘它的完成时刻$($每个任务的完成时刻为其所在的那一批任务的最后一个任务的完成时刻$)$,求最小总费用。

    【思路分析】

    首先很简单可以想到设$f[i][j]$为前$i$个任务分成$j$批完成的最小总费用,转移方程为$f[i][j]=min{f[k][j-1]+(S*j+sum_{x=1}^{i}T_x)*sum_{x=k+1}^{i}C_x}(0le k<i)$

    显然时间复杂度为$O(n^3)$,这样肯定过不了,我们考虑如何优化。

    实际上我们每次重新启动机器,相当于让后面所有任务的完成时刻同时加上$S$,也就是说我们并不需要知道前面的任务已经分成了几批。

    设$f[i]$表示完成前$i$个任务的最小总费用$($包括后面的任务多出的$S$时间所花费的费用$)$,则转移方程为$f[i]=min{f[j]+sum_{x=1}^{i}T_x*sum_{x=j+1}^{i}C_x+S*sum_{x=j+1}^{n}C_x}(0le j<i)$

    【代码实现】

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 #include<queue>
     7 #define g() getchar()
     8 #define rg register
     9 #define go(i,a,b) for(rg int i=a;i<=b;i++)
    10 #define back(i,a,b) for(rg int i=a;i>=b;i--)
    11 #define db double
    12 #define ll long long
    13 #define il inline
    14 #define pf printf
    15 #define mem(a,b) memset(a,b,sizeof(a))
    16 using namespace std;
    17 ll fr(){
    18     ll w=0,q=1;
    19     char ch=g();
    20     while(ch<'0'||ch>'9'){
    21         if(ch=='-') q=-1;
    22         ch=g();
    23     }
    24     while(ch>='0'&&ch<='9') w=(w<<1)+(w<<3)+ch-'0',ch=g();
    25     return w*q;
    26 }
    27 const int N=5002;
    28 int n,s;
    29 ll f[N],st[N],sc[N];
    30 int main(){
    31     //freopen("","r",stdin);
    32     //freopen("","w",stdout);
    33     n=fr();s=fr();
    34     go(i,1,n)st[i]=st[i-1]+fr(),sc[i]=sc[i-1]+fr();
    35     mem(f,0x3f);f[0]=0;
    36     go(i,1,n)go(j,0,i-1)
    37         f[i]=min(f[i],f[j]+st[i]*(sc[i]-sc[j])+s*(sc[n]-sc[j]));
    38     pf("%lld
    ",f[n]);
    39     return 0;
    40 }
    代码戳这里
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/THWZF/p/11716518.html
Copyright © 2011-2022 走看看