背包问题

背包问题初始化的一个小技巧,各种背包都可以用

 

 01背包常数优化

 

 即后面(i…n)的所有物品都被装入背包后,剩余的空间仍然比 Ci 大。考虑到f[j]定义为容量为j的背包,装入前i种物品(不需要装满)的最大价值。若剩余空间比ci大,则此时f[ci]....f[v-sum(wi+1.....wn) - 1]是影响不到最终状态f[v]的,故无需更新,因为容量越大的背包装下的肯定更大,所以只需处理到f[v-sum(wi+1.....wn) - 1], 若需要装满则更不需要了,因为同理是取不到那些值的

 

多重背包的二进制优化

 

0....2^K-1代表着前k位,而前k位自然可以被1,2,4,...,2^k-1填满,而2^k....p[i]则可以由前p[i]-2^k+1 加上前面的1,2,4,...,2^k-1填满,故可以这样拆分

 

 

 

 

 

   

posted @ 2021-03-05 20:42  大W  阅读(52)  评论(0)    收藏  举报