HDOJ 3496(背包)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 using namespace std;
10 int dp[100][10010];
11 int main(int argc, char *argv[])
12 {
13     int t,time[110],v[110],n,m,l;
14     scanf("%d",&t);
15     while(t--)
16     {
17         scanf("%d%d%d",&n,&m,&l);
18         for(int i=0;i<n;i++)
19         {
20             scanf("%d%d",&time[i],&v[i]);
21         }
22         for(int i=0;i<=m;i++)
23         {
24             for(int j=0;j<=l;j++)
25             {
26                 if(i==0)
27                 dp[i][j]=0;
28                 else
29                 dp[i][j]=-0x3f3f3f3f;
30             }
31         }
32         for(int i=0;i<n;i++)
33         {
34             for(int j=l;j>=time[i];j--)
35             {
36                 for(int k=1;k<=m;k++)
37                 dp[k][j]=max(dp[k][j],dp[k-1][j-time[i]]+v[i]);
38             }
39         }
40         if(dp[m][l]>0)
41         printf("%d",dp[m][l]);
42         else
43         printf("0");
44         printf("\n");
45     }
46     return 0;
47 }

猜你喜欢

转载自www.cnblogs.com/huluxin/p/9657546.html