给定的
这个问题被称为“零一背包”,用于为容量有限的背包选择最有益的商品。
在这五种货物中:
Goods chosen Total weight Total value
Goods 1, 2 and 3 2 + 3 + 5 = 10 2 + 4 + 8 = 14 <- Maximum
发布于 2012-10-20 17:29:48
好吧,我想我会咬人的。
from itertools import *
def k(w,p,c):
n=len(w)
r=range(n)
return max(filter(lambda y:y[1]<=c,[(s,sum(map(lambda y:w[y],s)),sum(map(lambda y:p[y],s))) for s in chain.from_iterable(combinations(r,u) for u in r+[n])]),key=lambda y:y[2])[0]
k
函数包含三个参数:包含权重的列表、包含利润的列表和背包的容量。考虑到上面的例子,下面是如何调用它:
> print k([2,3,5,7,8], [2,4,8,9,10], 10)
(0, 1, 2)
这意味着项目0、1和2是最佳解决方案。
https://codegolf.stackexchange.com/questions/8586
复制