HDU 3496 Watch The Movie(二维背包)
其实这个题不算难。。。可是题意就没搞懂,此题为恰好m件,WA到死啊。初始化为一个很大的负数,就能解决这个问题。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 int p[101][1001]; 6 int ti[101],v[101]; 7 int main() 8 { 9 int t,i,j,n,m,l,k,max; 10 scanf("%d",&t); 11 while(t--) 12 { 13 memset(p,128,sizeof(p)); 14 scanf("%d%d%d",&n,&m,&l); 15 for(i = 1; i <= n; i ++) 16 scanf("%d%d",&ti[i],&v[i]); 17 p[0][0] = 0; 18 for(i = 1; i <= n; i ++) 19 { 20 for(j = m; j >= 1; j --) 21 { 22 for(k = l; k >= ti[i]; k --) 23 { 24 if(p[j][k] < p[j-1][k-ti[i]]+v[i]) 25 p[j][k] = p[j-1][k-ti[i]]+v[i]; 26 } 27 } 28 } 29 max = 0; 30 for(i = 1;i <= l;i ++) 31 { 32 if(max < p[m][i]) 33 max = p[m][i]; 34 } 35 printf("%d\n",max); 36 } 37 return 0; 38 }