python 解决背包问题

这篇博客分享了如何利用Python解决经典的背包问题。作者贴出了初步的代码实现,并表示还有优化空间,供日后参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用python 解决背包问题,代码还可以进一步优化,先粘贴出来,以作以后处理

 

 

#coding:utf-8

#存放多种组合,key为价格,value为good_store实例
combination = {}

class goods(object):
    '''
    #物品类
    #三个属性,价格,体积,物品名称
    '''
    def __init__(self, name, price, volume):
        self.price = price
        self.volume = volume
        self.name = name


class good_store(object):
    '''
    #一种物品组合存储容器类
    #四个属性,容器内物品总体积,容器内物品总价值,容器内物品,容器最大容积
    '''
    def __init__(self, max_v):
        self.volume = 0
        self.price = 0
        self.goods = []
        self.max_v = max_v
    def put(self, goods):
        '''
        #存放物品,存放成功返回True,否则返回False
        '''
        if self.volume+goods.volume > self.max_v:
            
            return False

        self.goods.append(goods)
        
        self.volume += goods.volume
        self.price += goods.price
        return True
    

def find_combination(dst, store, bag_volume ):
    '''
    #递归完成物品组合放置
    #
    '''
    global combination

    for i in dst:
        
        if store.put(i):
            
            new_dst = [j for j in dst if j != i]
            if not find_combination(new_dst,store, bag_volume):
                combination[store.price] = store
                
                store = good_store(bag_volume)
        else:
            continue
    return False

if __name__ == "__main__":
    #global combination
    bag_volume = 40
    aa = goods('aa', 10, 5)
    bb = goods('bb', 20, 30)
    cc = goods('cc', 15, 10)
    dd = goods('dd', 6, 2)
    ee = goods('ee', 11, 11)
    ff = goods('ff', 25, 11)
    dst = [aa, bb, cc, dd, ee, ff]
    st = good_store(bag_volume)
    find_combination(dst, st, bag_volume)
    print(max(combination.keys()))
    print(combination[max(combination.keys())] )

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值