Python小号背包

时间:2016-11-06 07:45:24

标签: python knapsack-problem

问题: 此代码问题的目标是实现分数背包问题的算法

输入: 输入的第一行包含项目数和背包的容量。下一行定义项目的值和权重。 -th行包含整数,它们分别是-th项的值和权重。

输出: 输出适合背包的物品分数的最大值。程序答案与最佳值之间差异的绝对值应至多为0.001。

以下是我的回答:

import sys

def get_optimal_value(capacity, weights, values):

    unit_value = [a/b for a,b in zip(values,weights)]
    unit_value = sorted(unit_value, key=int, reverse=True)
    m = len(unit_value)

    if capacity == 0: return []
    for i in range(0,m):
        if weights[i] > capacity: return unit_value[i]*capacity
        if weights[i] <= capacity: return values[i] + get_optimal_value(capacity-weights[i], weights, values)

if __name__ == "__main__":
    data = [int(x) for x in input("").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)
    print("{:.10f}".format(opt_value))

但是,当我将案例作为

运行时
n = 3 , capacity = 50,
1st item: 60 20
2nd item: 100 50
3rd item: 120 30

输出为160而不是180,这是正确的答案。

0 个答案:

没有答案