http://acm.hdu.edu.cn/showproblem.php?pid=2191 #include<stdio.h> #include<iostream> #include<string.h> using namespace std; const int N=1000; int w[N],val[N],dp[N],num[N]; int main() { int c,n,m,i,j,k; scanf("%d",&c); while(c--) { scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d%d",&w[i],&val[i],&num[i]); } memset(dp,0,sizeof(dp)); for(i=1;i<=m;i++) { for(j=1;j<=num[i];j++) { for(k=n;k>=w[i];k--) dp[k]=max(dp[k],dp[k-w[i]]+val[i]); } } printf("%d\n",dp[n]); } }