您的位置:首页 > 其它

bzoj1222: [HNOI2001]产品加工

2017-04-11 15:55 357 查看
传送门

奇怪的dp

用f[i]表示第一个机器工作了i时第二个机器的最短工作时间。

暴力枚举由哪一个机器完成即可。

#include<cstring>
#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int a[6005],b[6005],c[6005],f[30005],n,m,ans,tmp;
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
if (!a[i]) a[i]=inf;
if
4000
(!b[i]) b[i]=inf;
if (!c[i]) c[i]=inf;
m+=min(a[i],min(b[i],c[i]));
}
for (int i=1;i<=n;i++)
for (int j=m;j>=0;j--){
tmp=inf;
if (j>=a[i]) tmp=min(tmp,f[j-a[i]]);
tmp=min(tmp,f[j]+b[i]);
if (j>=c[i]) tmp=min(tmp,f[j-c[i]]+c[i]);
f[j]=tmp;
}
ans=inf;
for (int i=0;i<=m;i++) ans=min(ans,max(f[i],i));
printf("%d",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: