多重背包 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 }