Python代码解决0-1背包问题

本文探讨了一种解决背包问题的方法,即通过单位价值量对物品进行选择的贪心策略。代码实现中,首先读取书包容积、物品数量及对应体积和价格,然后计算每个物品的单位价值量,并按照此值排序。接着,使用贪心算法选择单位价值量最高的物品装入书包,直到书包无法再装下任何物品。最终输出书包内能容纳的物品的最高总价格。

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

题目描述:

输入书包容积、物品数量、物品体积以及对应的价格

输入描述:

书包容积和物品数量

第一行输入书包容积和物品数量

第二行输入每个物品对应的体积

第三行输入每个物品对应的价格

输出描述:

书包内能放下的物品的最高价格


该题可以采用多种方法做解答,例如:贪心算法、动态规划算法等等。还有一种方法就是【按照单位价值量】对商品进行选择,也是一种贪心算法,把单位价值量高的商品添加进背包中,然后再将次之的放入进来,但是当单位价值量最高的商品添加的时候,需要进行比较商品的价值,选择高者添加进背包,想着比较容易,直接上代码,属于小白写的代码简单易懂~


m, n = input().split(',')
m, n = int(m), int(n)
vList = input().split(',')
pList = input().split(',')
value = []

for i in range(n):
    vList[i] = int(vList[i])
    pList[i] = int(pList[i])
    value.append(pList[i]/ vList[i])

save = [vList, pList, value]
print(save)

def solve(m, n, value, save):
    price = 0
    while m > 0 and len(value) >= 1:
        if len(value) == len(set(value)):
            max_index = value.index(max(value))
        else:
            max_index = value.index(max(value))
            for i in range(len(value)):
                if value[i] == max(value) and save[1][i] > save[1][max_index]:
                    max_index = i
        if m >= save[0][max_index]:
            m = m - save[0][max_index]
            price = price + save[1][max_index]
            del value[max_index]
            del save[0][max_index]
            del save[1][max_index]
            # print(save[0][max_index])
        else:
            break
    return price


max = solve(m, n, value, save)
print(max)

运行效果测试如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值