问题描述
我尝试在 Python 中编写 0/1 Knapsack 动态编程自底向上方法。
我尝试过的代码:
def knapSack(W,wt,val,n):
matrix = [[0]*(W+1)]*(n+1)
print(matrix)
for i in range(n+1):
for j in range(W+1):
if i == 0 or j == 0:
matrix[i][j] = 0
elif wt[i-1] <= j:
matrix[i][j] = max(val[i-1]+matrix[i-1][j-wt[i-1]],matrix[i-1][j])
else:
matrix[i][j] = matrix[i-1][j]
return matrix[n][W]
def knapSack2(W,n):
t = [[0 for i in range(W+1)] for j in range(n+1)]
print(t)
for i in range(n+1):
for j in range(W+1):
if i == 0 or j == 0:
t[i][j] = 0
elif wt[i - 1] <= j:
t[i][j] = max(val[i-1] + t[i-1][j - wt[i-1]],t[i-1][j])
else:
t[i][j] = t[i-1][j]
return t[n][W]
n = 3
W = 4
wt = [1,2,3]
val = [4,5,1]
print(knapSack(W,n))
print(knapSack2(W,n))
我得到的输出是:
[[0,0],[0,0]]
16
[[0,0]]
9
问题:为什么除了声明之外,两个函数的代码完全相同,但输出结果却有所不同?
像这样,即使打印函数值相同,下面的声明也有区别吗?
matrix = [[0]*(W+1)]*(n+1)
matrix = [[0 for i in range(W+1)] for j in range(n+1)]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)