【发布时间】:2018-12-11 13:38:26
【问题描述】:
我一直在研究递归并试图解决背包问题 [https://en.wikipedia.org/wiki/Knapsack_problem].我想出了下面的算法,效果很好:
cost_array = [2,3,4,5,9]
value_array = [3,4,8,8,10]
def KP(Weight, C, V):
if Weight < 2:
return 0
q = 0
for i in range(len(C)):
q = max(q, (KP(Weight-C[i], [x for j,x in enumerate(C) if j!=i], \
[x for j,x in enumerate(V) if j!=i]) + V[i]*(Weight-C[i] >= 0)))
return q
print(KP(25,cost_array,value_array))
但是,当我将q 的值更改为q < 0 并调用print(KP(25,cost_array,value_array)) 时,我得到的结果是33 - q。 33 是背包可以拥有的最大值。
这里的奇怪之处在于,如果我使用 Weight > 23 和此处 23=2+3+4+5+9 调用初始函数,我只会得到这种行为。
我不知道在什么时候将负数 q 添加到我的结果中,这条线从来没有执行过这样的操作,你们能启发我吗?
q = max(q, (KP(W-C[i], [x for j,x in enumerate(C) if j!=i], [x for j,x in enumerate(V) if j!=i]) + V[i]*(W-C[i] >= 0)))
谢谢,
d_darric
【问题讨论】:
-
实际上,当您为
q分配一个负值时,您得到的是33+q而不是33-q
标签: python-3.x algorithm knapsack-problem