bzoj1222: [HNOI2001]产品加工--DP
DP神题orz
dp[i]表示机器1工作i小时,机器2工作dp[i]小时
那么对于每个任务:
选1:dp[i]=dp[i-a];
选2:dp[i]=dp[i]+b;
选1+2:dp[i]=dp[i-c]+c;
1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 using namespace std; 5 int n,a,b,c,maxT,dp[30500]; 6 int main(){ 7 scanf("%d", &n); 8 maxT=n*5; 9 for (int i=0; i<=maxT; i++) dp[i]=1000000100; 10 dp[0]=0; 11 for (int i=1; i<=n; i++){ 12 scanf("%d%d%d", &a, &b, &c); 13 for (int j=maxT; j>=0; j--){ 14 int t=dp[j]; dp[j]=1000000100; 15 if (a && j-a>=0) dp[j]=min(dp[j], dp[j-a]); 16 if (b) dp[j]=min(dp[j], t+b); 17 if (c && j-c>=0) dp[j]=min(dp[j], dp[j-c]+c); 18 } 19 } 20 int ans=0x7fffffff; 21 for (int i=0; i<=maxT; i++) 22 ans=min(ans,max(dp[i],i)); 23 printf("%d\n", ans); 24 return 0; 25 }