多重背包 HDU2191

 1 #include <iostream>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 
 6 int v[2010];
 7 int w[2010];
 8 long long int dp[400010];
 9 
10 int main()
11 {
12     int T;
13     cin>>T;
14     while(T--)
15     {
16         int n,m;
17         cin>>n>>m;
18         int p,h,c;
19         int num=0;
20         for(int i=0;i<m;i++)
21         {
22             cin>>p>>h>>c;
23             for(int t=0;t<c;t++)
24             {
25                 w[num]=p;
26                 v[num]=h;
27                 num++;
28             }
29         }
30         memset(dp,0,sizeof(dp));
31         for(int i=0;i<num;i++)
32         {
33             for(int j=n;j>=w[i];j--)
34             {
35                 dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
36             }
37         }
38         cout<<dp[n]<<endl;
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/wsruning/p/4669019.html