当前位置: 首页 > news >正文

部分背包问题

本节学习解决部分背包问题,部分背包代表物品可以按照一定比例被分割,而后放入背包内.这是十分经典的用贪心算法解决的问题.

问题描述:

给定一些物品,用matrix表示各个物品的属性,第一项表示物品的质量,第二项表示物品的总价值.现有一背包最大承重为M,试求如何让背包中所装物品价值最高

思路解析:

既然背包中的物品可以被分割,而背包容量有限,要想让背包中所装物品价值最大,是要尽可能先装入单位价值大的物品,变量定义如下:

matrix变量:表示给定的各个物品的重量和价值

max变量:表示给定的背包所能承受的最大重量

re变量:表示背包物品的价值之和

re_list变量:表示各个物品放入的百分比,若将某一物品全部放入,则为1

完整代码如下:

def bag(matrix, max):# 初始化总价值为0re = 0# 创建一个列表,用于记录每个物品是否被选中,初始化为0re_list = [0 for _ in range(len(matrix))]# 根据物品的价值重量比对matrix进行降序排序matrix.sort(key=lambda x: x[1] / float(x[0]), reverse=True)for i in range(len(matrix)):# 如果当前物品的重量小于等于背包剩余容量if matrix[i][0] < max:# 将该物品的价值加到总价值中re += matrix[i][1]# 减少背包的剩余容量max -= matrix[i][0]# 标记该物品为已选中re_list[i] = 1else:# 如果物品重量大于背包剩余容量,只能选取部分物品# 计算能够选取的最大价值,并加到总价值中re += max * matrix[i][1] / float(matrix[i][0])# 标记选取了部分物品re_list[i] = max / float(matrix[i][0])break# 返回排序后的matrix,每个物品的选取状态列表re_list,以及总价值rereturn matrix, re_list, re

http://www.lryc.cn/news/510975.html

相关文章:

  • 教师管理系统
  • Word论文交叉引用一键上标
  • 集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!
  • Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider
  • 【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode
  • Spring boot处理跨域问题
  • 每日小题打卡
  • RockyLinux介绍及初始化
  • 2024年12月青少年软件编程(C语言/C++)等级考试试卷(三级)
  • 【Leecode】Leecode刷题之路第92天之反转链表II
  • StableAnimator模型的部署:复旦微软提出可实现高质量和高保真的ID一致性人类视频生成
  • 3.阿里云flinkselectdb-py作业
  • MATLAB语言的网络编程
  • 深入浅出 Linux 操作系统
  • golang实现生产者消费者模式
  • 自动化测试-Pytest测试
  • Ingress-Nginx Annotations 指南:配置要点全方面解读(下)
  • 【QED】等式构造
  • Kafka数据迁移全解析:同集群和跨集群
  • Debian安装配置RocketMQ
  • vue之axios基本使用
  • 三只脚的电感是什么东西?
  • 【数据库学习笔记】SQL触发器(例题+代码)
  • Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果
  • BAPI_BATCH_CHANGE在更新后不自动更新批次特征
  • 顶会评测集解读-AlignBench: 大语言模型中文对齐基准
  • MySQL外键类型与应用场景总结:优缺点一目了然
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的网上书店管理系统的设计与实现
  • 力扣面试题 - 40 迷路的机器人 C语言解法
  • ElementPlus 自定义封装 el-date-picker 的快捷功能