python实现分数背包和01背包【贪心,动态规划,暴力】(注释版)

目录

详细需求

详细代码

文件结构

fuction.py

Lab3.py


详细需求

要求在一个物品集合中选择合适的物品放入背包,在放入背包中的物品总重量不超过背包容量的前提下,希望放入背包的物品总价值最大。根据是否允许部分物品放入背包的要求,背包问题可以分为分数背包问题和0-1背包问题。

对于分数背包问题,可以通过设计贪心算法得到问题实例的最优解。对于0-1背包问题,该问题已经被证明为NP-Hard,即不存在多项式时间算法那求解,但可以通过贪心算法得到问题的近似解,或者通过蛮力法、动态规划法得到问题的最优解。

详细代码

文件结构

fuction.py

import numpy


def input_s():
    beibao_rongliang = int(input("输入背包容纳重量:"))
    shu_liang = int(input("输入商品数量:"))
    weights = []
    values = []
    for i in range(shu_liang):
        weight = int(input("输入第" + str(i + 1) + "个商品重量:"))
        value = int(input("输入第" + str(i + 1) + "个商品价值:"))
        weights.append(weight)
        values.append(value)
    return values, weights, beibao_rongliang


def greedy_for_fs(values, weights, beibao_rongliang):
    print("**************贪心算法分数****************")
    print("--------------性价比排序----------------")
    xing_jiabi = []
    for i in range(len(weights)):
        xing_jiabi.append(values[i] / weights[i])
    xing_jiabi = numpy.array(xing_jiabi)
    bigtoSmall = numpy.argsort(xing_jiabi)[::-1]
    val
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值