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

  

posted @ 2018-11-06 14:22  ~Silent  阅读(169)  评论(0编辑  收藏  举报
Live2D