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; }