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]);
}
}