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 }

你可能感兴趣的:(HDU)