Python實現經典01揹包問題:一堆寶石,一共有n個。 只有一個揹包,揹包的容量爲C。n個寶石排成一排並編上號: 0...

題目:

一堆寶石,一共有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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章