例题: 背包最多可装6kg,每个物品只有一件,如何装能获得最大价值。
物品1: 3kg 10元
物品2: 1kg 3元
物品3: 2kg 9元
物品4: 2kg 5元
物品5: 1kg 6元
动态规划法:
每个物品只有一件,所以对于结果来说只有装与不装的问题。
我们新建一个二维数组dp[][]来存储到当前位置的最大价值,行坐标取物品的件数, 列坐标以1kg为间隔取背包的最大容量。dp[i][j]代表在最大容量为j kg的背包内,可供选择装入的物品有 1 - 物品i的情况下,我们能得到的的最大价值。
这个最大价值判断标准,不装物品i我们能得到的最大价值和装进物品i我们能获得的价值取最大值,关键代码为:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i] ]+value[i];