每件物品可以使用无限次
#include <iostream>
using namespace std;
int main()
{
int n,m; //n个物品 m最大容量
int d[200][200]; //从前i个物品中选 背包容量为j
int w[200],v[200]; //weight value 数组
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
for(int i=1;i<=n;i++) //物品
{
for(int j=0;j<=m;j++) //容积
{
if(j<w[i]) d[i][j]=d[i-1][j];
else
{
d[i][j]=max(d[i-1][j],d[i][j-w[i]]+v[i]);
}
}
}
cout<<d[n][m];
return 0;
}
//优化 一维
for(int i=1;i<=n;i++)
{
for(int j=w[i];j<=m;j++) //因为小于时当前背包和上一层背包没有差别 所以省略
{
d[j]=max(d[j],d[j-w[i]+v[i]]);
}
}