多重背包转01背包
- 方法一:直接把物品个数全部拆成相同的物品,时间复杂度为O(V∑c[i])O(V∑c[i])
- 方法二:把这些物品按2x2x展开,拆成loglog个物品。这些物品可以组成[1,n][1,n]所有值,时间复杂度为O(V∑log2c[i])O(V∑log2c[i])
一般的DP方程
f[i][j]=max(f[i−1][j−c[i]×k]+w[i]×k)f[i][j]=max(f[i−1][j−c[i]×k]+w[i]×k)
* 注意:单调队列的步长限定
f[i][j]=max(f[i−1][j−c[i]×k]+w[i]×k)f[i][j]=max(f[i−1][j−c[i]×k]+w[i]×k)
* 注意:单调队列的步长限定