我正在尝试在计算我使用的每个项目的数量时实现无界背包。这是我的代码:
def best(x, items):
sum = []
n = len(items)
opt = [[0 for i in range(0,x+1)] for j in range(0,n+1)]
items.insert(0,(0,0,0))
list = [0 for i in items]
for i in range(1, n+1):
weight, value, copies = items[i][0],items[i][1], items[i][2]
for j in range(1,x+1):
temp = []
for k in range(0,x//weight+1):
if k*weight <= j:
temp = temp + [[opt[i-1][j-k*weight]+k*value, i]]
print(temp)
opt[i][j] = max(temp, key= lambda x: x[0])
print("OPT: ",opt)
print("LIST: ",list)
return opt[i][j]
我想将最佳值和项目数用于数组,但是出现了这个错误:
temp = temp + [[opt[i-1][j-k*weight]+k*value, i]]
TypeError: can only concatenate list (not "int") to list
我已经尝试了几种不同的方法,但仍然对此出了什么问题一无所知。
感谢您的帮助
很抱歉这个混乱, 所以用法示例是:x是背包的容量。 items是每个项目的列表,包含它的重量,值,副本。
所以预期的输入和输出将是:
print(best(3, [(1, 5, 2), (1, 5, 3)]))
>>>(15, [2, 1])