经典多重背包
这道题数据不大,使用的转化为01背包解决的,数据大的话就要加入二进制的思想
#include<iostream>
using namespace std;
const int N=1000+10;
int cost[N],weight[N],count[N],f[N];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int t;
int V,n;
int i,j,k;
cin>>t;
while(t--)
{
cin>>V>>n;
for(i=1;i<=n;i++)
cin>>cost[i]>>weight[i]>>count[i];
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
{
for(j=1;j<=count[i];j++)//转化
{
for(k=V;k>=cost[i];k--)
{
f[k]=max(f[k],f[k-cost[i]]+weight[i]);
}
}
}
printf("%d\n",f[V]);
}
return 0;
}