同样的东西,能切开就不一样了
还是这三件、还是装 10,但这次可以切开按比例拿(切下来那部分的价值按 价值 * 剩余容量 // 重量 算,保证整除)。运行下面这段程序:
def knap_frac(items, cap):
v = 0
for w, val in sorted(items, key=lambda it: it[1] / it[0], reverse=True):
if w <= cap:
cap -= w
v += val
else:
v += val * cap // w
cap = 0
break
return v
print(knap_frac([(6, 30), (5, 20), (5, 20)], 10))
全部评论