关于背包九讲01背包中的常数优化
for i ← 1 to N
for v ← V to Ci
优化为
for i ← 1 to N
for v ← V to max (V−key, Ci )
其中key=∑niCi
这里的max优化就是考虑了这样一种情况:
即使后面(i…n)的所有物品都被装入背包后,剩余的空间仍然比 Ci 大
我们知道空间优化后的一维数组中的状态转移方程如下
dp [v] ← max (dp [v], dp [v − C] + W )
我们是不断通过比较上一轮的dp结果进行状态转移
进一步的,如果满足优化条件
那么对于 i+1...n
的情况 这里的 v-C
将最多取值取到 key
而 key to Ci
的不会被取到也就没有计算的必要了
这个优化对V比较大是效果显著