1 /************************************* 2 3 01背包入门题 4 把每袋大米做01背包就可以了。 5 http://acm.hdu.edu.cn/showproblem.php?pid=2191 6 7 *************************************/ 8 9 #include<iostream> 10 #include<cstring> 11 #include<algorithm> 12 using namespace std; 13 14 const int mx=111; 15 int dp[mx],p[mx]; 16 int h[mx],c[mx]; 17 18 int main() 19 { 20 int n,m,i,j,t; 21 cin>>t; 22 while (t--) 23 { 24 cin>>n>>m; 25 for (i=0;i<m;i++) cin>>p[i]>>h[i]>>c[i]; 26 memset(dp,0,sizeof(dp)); 27 28 for (i=0;i<m;i++) ///01背包模板 29 { 30 while (c[i]--) ///把每袋大米做01背包就可以了。 31 { 32 for (j=n;j>=p[i];j--) 33 dp[j]=max(dp[j],dp[j-p[i]]+h[i]); 34 } 35 } 36 cout<<dp[n]<<endl; 37 } 38 39 }