贪心算法-分数背包问题(Python实现)

import ioTool

def beibao(s,m,b):
    bb = 0  # 现在的背包容量
    beibaoA = [] #放入背包的东西


    #循环的i的范围不能超过传过来的数量,并且背包的容量也不能超过预定的数量(例如:50,则只能小于等于50)
    i = 0
    while i < len(s) and bb<=b:
        #判断是否已经放入背包了
        if len(beibaoA)  != 0:
            #背包里现在没装,并且数量也不够
            if beibaoA.__contains__(s[i]) == False  and bb<b and (bb + s[i]) <= b:
                beibaoA.append(s[i])  # 暂存
                bb = bb + s[i]
            elif beibaoA.__contains__(s[i]) == False  and bb<b and (bb + s[i]) >= b:
                num = b - bb
                bb = bb + num
                beibaoA.append(num)
        else:
            beibaoA.append(s[i])  # 暂存
            bb = bb + s[i]
        i += 1
    return beibaoA,bb


if __name__ == '__main__':
    # 价值 / 重量    价值比从高低排序,,没超过往里装,超过了就不装了。  分数背包
    s = [ 10, 20, 30]  # 重量
    m = [60, 100, 120]  # 价值
    b = 50  # 背包总容量
    k = 0
    beibao  = beibao(s,m,b)
    print("背包中存入的:", beibao[0])
    print("背包的容量:", beibao[1])

    for i in range(len(s)):
        print("从:商品",i,"取:",beibao[0][i])

    ioTool.writeLine(beibao, "output2.txt")


结果

在这里插入图片描述

发布了79 篇原创文章 · 获赞 70 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_17623363/article/details/103454230