题目:
一堆宝石,一共有n个。 只有一个揹包,揹包的容量为C。n个宝石排成一排并编上号: 0,1,2,…,n-1。第i个宝石体积和价值分别V[i]和W[i] 。揹包容量为C,要装哪些宝石装的价值最高;
# -*- coding:utf-8 -*-
__author__ = 'yangxin_ryan'
"""
Solutions:
经典的01揹包问题,选择添加与不添加;
那么有三种判断条件:
1.循环走完,最后一个应该是0;
2.当前揹包的容量小于待加入的体积时,i+1,揹包容量不变;
3.当前揹包的容量大于待加入的体积是,max(self.run(i + 1, volume), self.run(i + 1, volume - self.weight_list[i]) + self.value_list[i])
也就是状态转移方程,最后返回结果即可;
"""
class BagQuestion(object):
def __init__(self, n, weight_list, value_list):
self.n = n
self.weight_list = weight_list
self.value_list = value_list
def run(self, i, volume):
if i == self.n:
return 0
elif volume < self.weight_list[i]:
result = self.run(i + 1, volume)
else:
result = max(self.run(i + 1, volume), self.run(i + 1, volume - self.weight_list[i]) + self.value_list[i])
return result
if __name__ == '__main__':
bag_question = BagQue