一、多重背包
例题
![](https://img-blog.csdnimg.cn/img_convert/d818ab40d40522fa05df4b3c860bad8e.png)
![](https://img-blog.csdnimg.cn/img_convert/051d731c7dcc637772bdfcbd64f83fa8.png)
代码实现
#include<iostream>
using namespace std;
const int N=110;
int f[N][N];
int m, n,v[N],p[N],s[N];//s存的是每个物品的数量
int main()
{
cin >> n>>m;
for (int i = 1; i <= n; i++)
{
cin >>v[i]>>p[i]>> s[i];
}
for (int i = 1; i <= n; i++)//枚举物品
{
for (int j = i; j <= m; j++)//枚举体积
{
for (int k = 0; k <= s[i] && k * v[i] <= j; k++)//枚举选取了几个
{
f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * p[i]);
}
}
}
cout << f[n][m];
return 0;
}