在背包问题中,贪心法并不总是有效的。特别是在使用0-1背包问题时,贪心法可能无法获得最优解,因为它不能将物品分成小部分来装入背包。因此,可以使用动态规划的方法来解决0-1背包问题。以下是动态规划方法的代码示例:
def knapsack(W, wt, val, n): dp = [[0 for x in range(W + 1)] for x in range(n + 1)]
for i in range(n + 1): for w in range(W + 1): if i == 0 or w == 0: dp[i][w] = 0 elif wt[i-1] <= w: dp[i][w] = max(val[i-1] + dp[i-1][w-wt[i-1]], dp[i-1][w]) else: dp[i][w] = dp[i-1][w]
return dp[n][W]
W = 50 wt = [10, 20, 30] val = [60, 100, 120] n = len(val)
print(knapsack(W, wt, val, n))
输出:220
上一篇:背包问题,固定选择(必需)
下一篇:背包问题:背包具有可变重量