我正在研究一个简单的贪婪背包问题。我的代码是功能性的,但依赖于列表中某些元素的正确顺序;更具体地说,当一个元素是列表中的最高值并且位于列表的开始位置时,该元素将被附加到最终返回的列表中,然后从初始列表中删除-我面临的问题是元素及其索引的自然移动会影响下一次迭代
下面是我的代码和一个示例调用
def expensive_thief(weights, values, capacity):
returned_knapsack = []
weight_count = 0
value_list = list(values)
weight_list = list(weights)
while weight_count < capacity:
best_value = max(values)
i = values.index(best_value)
if weights[i] <= capacity - weight_count:
returned_knapsack.append(i)
weight_count = weight_count + weights[i]
del values[i]
del weights [i]
return returned_knapsack
print(expensive_thief([4,9,1,5,1], [5,10,9,8,4], 10))
应返回并打印[1,2]
,因为这些是具有最高值的项目的索引,也构成了最大容量
在我的代码中,初始值最高的元素(权重为9、值为10的元素1被添加到最终列表中并被删除,删除此元素会移动每个其他元素的索引,要添加的下一个元素(即正确的元素或索引2中的原始元素)在索引1处被引用)
我理解索引和引用,但似乎无法解决问题。请帮忙
目前没有回答
相关问题 更多 >
编程相关推荐