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 }
posted @ 2012-08-17 21:15  Naix_x  阅读(148)  评论(0编辑  收藏  举报