问题描述:
有n 个物品,它们有各自的重量和价值,现有给定容量c的背包,如何让背包里装入的物品具有最大的价值?
思路分析:
一、动态规划:
1、把背包问题抽象化(X1,X2,…,Xn,其中 Xi 取0或1,表示第 i 个物品选或不选),Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积(重量);
2、建立模型,即求max(V1X1+V2X2+…+VnXn);
3、约束条件,W1X1+W2X2+…+WnXn<c;
4、定义m(i,j):当前背包容量 j,前 i 个物品最佳组合对应的价值;
5、寻找递推关系式,面对当前商品有两种可能性:
第一,背包的容量比该商品体积小,装不下,此时的价值与前i-1个的价值是一样的,即V(i,j)=V(i-1,j);
第二,还有足够的容量可以装该商品,但装了也不一定达到当前最优价值,所以在装与不装之间选择最优的一个,即V(i,j)=max{V(i-1,j),V(i-1,j-w(i))+v(i) },其中V(i-1,j)表示不装,V(i-1,j-w(i))+v(i) 表示装了第i个商品,背包容量减少w(i)但价值增加了v(i);
由此可以得出递推关系式:
1) j<w(i)&n