一、多重背包问题
背包问题为有N种物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],数量为Mi,得到的价值是value[i] ,没件物品只能使用一次,将这些物品装进背包,怎么装价值最高。
二、多重背包问题的解法
我们注意到01背包并没有要求物品不一样,因此我么可以把多重背包摊开,把Mi件第i中物品视作Mi种物品,没种只有一个,这就转换成一个01背包问题,具体的转化方式有两种
1、显示摊开
void test_multi_pack() {
vector<int> weight = {
1, 3, 4};
vector<int> value = {
15, 20, 30};
vector<int> nums = {
2, 3, 2};
int bagWeight = 10;
/-----将物品展开-----/
for (int i = 0; i < nums.size(); i++) {
while (nums[i] > 1) {
// nums[i]保留到1,把其他物品都展开
weight.push_back(weight[i]);
value.push_back