我试图解决Knapsack problem
我输入数据,然后将这些数据排列在列表元组
中if __name__ == "__main__":
data = list(map(int, sys.stdin.read().split()))
n, capacity = data[0:2]
values = data[2:(2 * n + 2):2]
weights = data[3:(2 * n + 2):2]
opt_value = get_optimal_value(capacity, weights, values)
我的输入
3 40
20 50
40 60
50 60
我的元组:
[(20, 50), (40, 60), (50, 60)]
然后我按值//最大值对其进行排序。接下来我实现算法。
def get_optimal_value(capacity, weights, values):
ziplist = list(zip(values, weights))
newlist = sorted(ziplist, key = lambda x : x[0] / x[1], reverse = True)
m = capacity
while (m != 0):
for i in range(0,len(newlist)):
a = min(newlist[i][1],capacity)
value = a * newlist[i][0]/newlist[i][1]
m -= newlist[i][1]
return m
我的策略:
我工作直到背包的容量为0
如果排序元组的第一个列表中的重量小于背包的容量,则按该元素的重量减少背包的容量,并按元素值增加值
使用元组的下一个元素执行此步骤,直到容量为0
如果排序元组的第一个列表中的重量超过背包的容量,那么我需要将值重量与容量的比例相加
但是当我运行函数时什么都不返回 - 问题是什么?