#include<cstdio>
#include<cstring>
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))
int dp[1000];
int w[125],v[125],m[125];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int col,n;
scanf("%d%d",&col,&n);
for(int i=0;i<n;i++)
scanf("%d%d%d",&w[i],&v[i],&m[i]);
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
int num=m[i];
for(int k=1;num>0;k<<=1)
{
int mul=MIN(k,num);
for(int j=col;j>=mul*w[i];j--)
dp[j]=MAX(dp[j],dp[j-mul*w[i]]+mul*v[i]);
num-=mul;
}
}
printf("%d\n",dp[col]);
}
}
hdu 2192 (二进制)多重背包
最新推荐文章于 2022-09-09 22:07:37 发布