首页 > 编程语言 > 详细

贪心算法 部分背包问题的代码记录python实现

时间:2021-08-21 08:15:41      阅读:30      评论:0      收藏:0      [点我收藏+]
#问题:给定一些物品,用matrix表示(质量,价值),有一背包承重为M
#求如何装入物品使背包中物品价值最大,以及得出最大价值。可以部分装入
def bufenbeibao(matrix,M):
    total_value=0 #总价值
    take_lst=[0 for _ in range(len(matrix))] #物品表,用0初始化
    matrix.sort(key=lambda x:x[1]/float(x[0]),reverse=True)
    for i in range(len(matrix)): #从最大价值的物品开始判断
        if matrix[i][0]<M: #质量小于当前背包容量
            total_value+=matrix[i][1]
            M-=matrix[i][0] #更新总价值
            take_lst[i]=1 #更新物品表
        else:
            #如果背包容量小于等于当前物品质量
            #就放入部分物品
            total_value+=M*matrix[i][1]/float(matrix[i][0])  #总价值/总量=单位价值
            #价值加上 剩余填满背包的质量M*当前物品单位价值
            take_lst[i]=M/float(matrix[i][0]) #物品百分比(选择的量M/总量)
            break
    return matrix,take_lst,total_value

matrix=[(100,30),(60,10),(40,20),(120,50)] #(质量,价值)
M=240 #背包总容量

sorted_matrix,thing_list,value=bufenbeibao(matrix,M)
print("按单位价值从大到小排序后的matrix:",sorted_matrix)
print("拿取物品的占比:",thing_list)
print("获得物品的总价值为:",value)

  

贪心算法 部分背包问题的代码记录python实现

原文:https://www.cnblogs.com/ZhenghuiLyu/p/15168574.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!