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