題目:
一堆寶石,一共有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