问题: 此代码问题的目标是实现分数背包问题的算法
输入: 输入的第一行包含项目数和背包的容量。下一行定义项目的值和权重。 -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,这是正确的答案。