我有一个奇怪的问题。我正在尝试在python 3中使用DP实现0/1背包,并且当我将matrix(DP)设置为以下代码中的内容时,它可以工作,但是,如果我将DP更改为已注释掉的内容,则改为得到无限的背包的解决方案。任何人都可以弄清楚为什么会这样吗?我注意到,当我使用注释掉的DP时,包括第0行(仅应由零组成)的所有行都是相同的值。有什么想法吗?
def knapsack(values, weights, capacity):
n = len(values)
DP = [[0 for x in range(capacity+1)] for x in range(n+1)]
#DP = [[0] * (capacity+1)] * (n+1)
for i in range(1, n+1):
for j in range(1, capacity+1):
if weights[i-1] <= j:
DP[i][j] = max(values[i-1] + DP[i-1][j-weights[i-1]], DP[i-1][j])
else:
DP[i][j] = DP[i-1][j]
return DP[n][capacity]
weights = [10, 20, 30]
values = [60, 100, 120]
capacity = 50
print(knapsack(values, weights, capacity))
0/1中的输出为220,注释中的输出为300(这应该是无限制背包的解决方案)。经过其他示例输入的测试,每次都适用。