首页 > 其他 > 详细

[bzoj1222]产品加工

时间:2019-11-12 21:37:08      阅读:88      评论:0      收藏:0      [点我收藏+]

用f[i][j]表示完成前i个任务,在A机器上加工j小时时B机器上最少要工作多小时,转移就分为三种,即$f[i][j]=min(f[i-1][j-t1],f[i-1][j]+t2,f[i-t3]+t3)$,然后这个东西可以用类似于背包的方式优化到1维(注意要从大到小枚举)

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,a,b,c,s,ans,f[30005];
 4 int main(){
 5     scanf("%d",&n);
 6     for(int i=1;i<=n;i++){
 7         scanf("%d%d%d",&a,&b,&c);
 8         if (!a)a=1e5;
 9         if (!b)b=1e5;
10         if (!c)c=1e5;
11         for(int j=5*n;j>=0;j--){
12             f[j]+=b;
13             if (j>=a)f[j]=min(f[j],f[j-a]);
14             if (j>=c)f[j]=min(f[j],f[j-c]+c);
15         }
16     }
17     ans=f[0];
18     for(int i=1;i<=5*n;i++)ans=min(ans,max(i,f[i]));
19     printf("%d",ans);
20 }
View Code

 

[bzoj1222]产品加工

原文:https://www.cnblogs.com/PYWBKTDA/p/11844813.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!