题目描述:小偷来到了一个神秘的王宫,突然眼前一亮,发现5个宝贝,每个宝贝的价值都不一样,且重量也不一样,但是小偷的背包携带重量有限,所以他不得不在宝贝中做出选择,才能使偷到的财富最大,请你帮助小偷计算一下。
输入描述:
宝贝价值:6,3,5,4,6
宝贝重量:2,2,6,5,4
小偷背包容量:10
输出描述:
偷到宝贝的总价值:15
暴力解法思路:
1、将宝贝价值、宝贝重量分别作为两个列表
2、做压缩处理(zip方法):ziplist = list(zip(val,wei))
3、暴力解法的核心 O(∩_∩)O哈哈~:使用迭代器itertools中的组合模块combinations,从列表中ziplist 取1个,2个,3个....len(ziplist)个。并存放在alllsit中;
4、遍历alllist,将满足小偷背包容量的数据存在res列表中;
5、最后返回res中最大值即可。
def xiaoTou():
val = [6,3,5,4,6]
wei = [2,2,6,5,4]
target = 10
ziplist = list(zip(val,wei))
import itertools
alllist = []
for i in range(1,len(ziplist)+1):
tmp = list(itertools.combinations(ziplist,i))
for j in tmp:
alllist.append(j)
res = []
for i in alllist:
sumwei = 0
sumval = 0
for j in range(len(i)):
sumwei += i[j][1]
sumval += i[j][0]
if sumwei <= target:
res.append(sumval)
print(max(res))
超级暴力的解法,希望能帮到大家,祝顺利欧!



