问题
给定 _n _种物品和一个承重量为 _W _的背包,物品 _i _的重量是 wi,其价值为 vi,背包问题是如何选择装入背包的物品,使得装入背包中物品的总价值最大?
思路
关键在于推导出一个递推公式,用较小子实例的解的形式表示背包问题的实例的解。
设 F(i, j) 表示该实例的最优解的物品总价值,也即是限重为 j 时,背包中前 i 个物品中最大总价值。
把前 _i _个物品放进承重为 _j _的背包中的子集分为两类:包括第 i 件物品的子集和不包括第 i 件物品的子集。则
(1)不包括第 i 件物品的子集中,最优子集的价值是F(i-1, j);
(2)包括第 i 件物品的子集中,最优子集是由该物品和前 i-1 个物品能够放进 j-_wi _的背包的最优子集组成,此时总价值为_vi _+F(i-1, j-wi)
动态规划算法求解:自底向上填表
填表既可以逐行填,也可以逐列填。
TTE31UL_(2J3)(_L.jpg&originHeight=4032&originWidth=3024&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3559916&status=done&style=none&taskId=u34452c70-f065-4149-9e9c-7c3b73e1444&title=&width=2419.2)