对于没有数据小的时候我们可以在完全背包的问题上加一重循环来判断取多少个物品,但是当数据量太大时就会超时。
1 |
|
我们考虑多重背包的另外一种解法。将s[i]个物品拆成s[i]个一个物品放入数组中,这时题目转换成了01背包问题。在这个基础上我们可以做优化。
我们可以在拆分物品的时候做优化,将s[i]个物品不拆分为s[i]个一个物品而是拆分成floor(log2(s[i]))+1个数。
1 | 若我们想拆分 7 |
拆分过后将数放入数组中,转换成01完全背包问题
1 |
|
对于没有数据小的时候我们可以在完全背包的问题上加一重循环来判断取多少个物品,但是当数据量太大时就会超时。
1 | #include<iostream> |
我们考虑多重背包的另外一种解法。将s[i]个物品拆成s[i]个一个物品放入数组中,这时题目转换成了01背包问题。在这个基础上我们可以做优化。
我们可以在拆分物品的时候做优化,将s[i]个物品不拆分为s[i]个一个物品而是拆分成floor(log2(s[i]))+1个数。
1 | 若我们想拆分 7 |
拆分过后将数放入数组中,转换成01完全背包问题
1 | #include<iostream> |