解决背包分数优化

时间:2016-04-14 20:40:22

标签: python algorithm knapsack-problem

我试图解决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

我的策略:

  1. 我工作直到背包的容量为0

  2. 如果排序元组的第一个列表中的重量小于背包的容量,则按该元素的重量减少背包的容量,并按元素值增加值

  3. 使用元组的下一个元素执行此步骤,直到容量为0

  4. 如果排序元组的第一个列表中的重量超过背包的容量,那么我需要将值重量与容量的比例相加

  5. 但是当我运行函数时什么都不返回 - 问题是什么?

0 个答案:

没有答案