动态规划算法求解0/1背包问题代码(关键行注释)
时间: 2023-11-11 09:11:10 浏览: 60
下面是求解0/1背包问题的动态规划算法代码,其中关键行已经用注释标出。
```python
def knapSack(W, wt, val, n):
# 创建一个二维数组来存储子问题的解
K = [[0 for x in range(W+1)] for x in range(n+1)]
# 填充K[][]数组
for i in range(n+1):
for w in range(W+1):
# 初始化第一行和第一列为0
if i==0 or w==0:
K[i][w] = 0
# 如果物品i的重量小于当前背包容量w,则可以选择装或不装该物品
elif wt[i-1] <= w:
# 在不装物品i和装物品i中选择最优解
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
# 如果物品i的重量大于当前背包容量w,则不能选择装物品i
else:
# 不装物品i
K[i][w] = K[i-1][w]
return K[n][W]
```
这里用了一个二维数组K来存储子问题的解,其中K[i][w]表示前i个物品在容量为w的背包中可以获得的最大价值。初始化时,将第一行和第一列都设置为0,因为没有物品或背包容量为0时,最大价值都为0。对于每个物品i,分别考虑装或不装该物品。如果物品i的重量小于当前背包容量w,则可以选择装或不装该物品,取两种情况中的最优解。如果物品i的重量大于当前背包容量w,则不能选择装物品i,只能不装。最后返回K[n][W],即前n个物品在容量为W的背包中可以获得的最大价值。
阅读全文