BZOJ 1222: [HNOI2001]产品加工
F[i]表示第一个机器用了i的时间,第二个机器的最小时间
转移即可
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,F[30005];
int main(){
scanf("%d",&n);
for (int i=1; i<=5*n; i++) F[i]=1e9;
for (int i=1; i<=n; i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int C=max(max(a,b),c);
if (!a) a=1e9;
if (!b) b=1e9;
if (!c) c=1e9;
for (int j=m; j>=0; j--){
if (a!=1e9) F[j+a]=min(F[j+a],F[j]);
if (c!=1e9) F[j+c]=min(F[j+c],F[j]+c);
F[j]+=b;
F[j]=min(F[j],(int)1e9);
}
m+=C;
}
int ans=1e9;
for (int i=0; i<=m; i++) ans=min(ans,max(i,F[i]));
printf("%d\n",ans);
return 0;
}

浙公网安备 33010602011771号