Python多维约束(重量+体积+次数)背包问题(Knapsack Problem)

本文探讨了如何使用Python解决多维度约束的背包问题。包括不限次数的重量、价值和体积限制条件,以最大化背包中物品的价值。通过实例展示了如何处理不同约束下的背包问题,寻找最优解。
摘要由CSDN通过智能技术生成

问题描述:1、一个背包,往里装东西,物品重量w(weight)对应为[2,3,4,7] ,价值va(value)对应为[1,4,7,12] ,如果你的最大承重为20,每个物品可装次数不限,求你能装入背包的最大价值。
2、如果物品可装次数times对应为[4,3,2,1],求你能装入背包的最大价值。
3、如果物品体积vo(volume)对应为[3,5,8,17],最大容量为35,求你能装入背包的最大价值。

import pandas as pd

def Knapsack(w, vo, va, times, total_weight, total_volume):

    total_value = 0
    result = [{
   
                'weight': 0,
                'volume': 0,
                'value': 0,
                'total_value': total_value,  #递增
                'rest_weight': total_weight,  #递减
                'rest_volume':total_volume  #递减
            }]

    y = [0] * len(w)  #用以统计物品装入次数
    for i in range(1000):  #设置尝试装入次数
        k = 0
        for j in range(len(w)):
            if w[k] > total_weight or vo[k] > total_volume or y[k] == times[k]:  #去掉重量超过剩余承重或体积大于剩余容量或装入次数达到上限的物品
                print("重量%d体积%d:共装入%d次" %(w[k], vo[k], y[k]))
                del w[k], vo[k], va[k], times[k], y[k]
            else:
                k += 1

        if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yunzifengqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值