0 - 1背包问题:给定n种商品和一个给定固定容量的背包。物品 i 的重量是W[ i ],价值为V[ i ],背包的容量为C。问应当如何选择装入背包中的物品,是的装入背包中的物品的总价值最大?
注意:0 - 1背包的前提是对于同一个物品,要么放,要么不放,不能把物品 i 放入到背包多次,也不能只装入部分的物品 i 。因此该问题称为 0 - 1问题。
那么我们对于物品的选择有两点需要注意:①不能放不进背包,c < s[ i ],也就是背包的体积比较小。②能放入背包,拿的话这个物品就会给背包增加价值,不拿的话就会有其他情况。
那么最笨的方法就是穷举法,然后去挑选。但是很明显,这个问题是有最优子结构的,所以我们想到了用动态规划来考虑这个问题。设W = {w1,w2,...,wk}是全局最优解,则M = {w1,...,w(k-1)}一定是 c-s[ k ] 的最优解。
设V[i,j]表示将前 i 件物品放入到容量为 j 的背包中的最大价值。
那么就存在如下关系:
经