AcWing 9. 分组背包问题-C++
原题链接
中等
作者:
码
,
2020-05-01 13:28:44
,
所有人可见
,
阅读 1950
#include<iostream>
using namespace std;
const int N=1010;
int n,m,g[N][N],l,f[N];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>l;//l=每组物品的数量
for(int ii=1;ii<=l*2;ii+=2)
{
cin>>g[i][ii]>>g[i][ii+1];//g[i][ii]=v,g[i][ii+1]=w
}
}
for(int i=1;i<=n;i++)
{
int index=1;
while(g[i][index])//计算总物品数*2
{
index+=1;
}
index-=1;
for(int j=m;j>0;j--)
{
for(int ii=1;ii<=index;ii+=2)//遍历组内各个物品
if(j>=g[i][ii]) f[j]=max(f[j],f[j-g[i][ii]]+g[i][ii+1]);
}
}
cout<<f[m]<<endl;
return 0;
}