背包问题 python

一、01背包问题(经典)

问题描述:

    有N件物品和⼀个最多能被重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能⽤⼀次,求解将哪些物品装⼊背包⾥物品价值总和最⼤。
输入描述:

#####   初始化参数 
####  物品数量
count = 3
####  背包最大 4
max_weight = 4
####  价值
value = [15,20,30]
####  重量
weight = [1,3,4]

输出描述:

35

思路:

思考第i件物品时,最大价值为max(不能取第i间物品的最大价值,能取第i件物品且剩余空间能装前i-1件物品的最大价值)

递推公式  dp[i][j] = dp[i-1][j]dp[i][j] = dp[i-1][j-weight[i]]+value[i]
由dp[i - 1][j]推出,即背包容量为j,⾥⾯不放物品i的最⼤价值,此时dp[i][j]就是dp[i - 1][j]
由dp[i-1][j-weight[i]]推出,dp[i-1][j-weight[i]]为背包容量为j-weight[i]的时候不放物品i的最⼤价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最⼤价值因此   dp[i][j] = max(dp[i-1][j-weight[i]]+value[i],dp[i-1][j])

参考:蓝桥杯专辑(Python组)——0-1背包问题_蓝桥杯求解01背包问题python-CSDN博客

B站【DP动态规划】备战蓝桥杯——DP算法模板超详细讲解

具象化描述参考:

B站【自制】01背包问题算法动画讲解

两个B站视频之间的联系与区别:首先来说就是说思路是完全一样的,只是在dp数组行数代表的物品数时,讲解算法的物品从0,1,2开始,即物品0,物品1,物品2,但是在背包动画演示的视频中物品是从1开始计数,即物品1,物品2,物品3,所以在代码实现上有一些细微的区别。

具体代码:

采取的是物品从0开始计数的方式
 

# coding = utf-8
# 初始化数量
count = 3
# 背包最大容量
max_weight = 4
# 物品价值
value = [15, 20, 30]
# 物品重量
weight = [1, 3, 4]
# 构建dp数组
dp = [[0 for i in range(max_weight + 1)] for j in range(count)]
# 初始化dp数组的第一列和第一行
for i in range(1):for j in range(max_weight + 1):if weight[i] <= j:dp[i][j] = value[i]
# 迭代形式
for i in range(1, count):for j in range(1, max_weight + 1):# 取该物品时if j >= weight[i]:dp[i][j] = max(dp[i - 1][j - weight[i]] + value[i], dp[i - 1][j])# 不取该物品时else:dp[i][j] = dp[i - 1][j]
# 输出最后结果
print(dp[count - 1][max_weight])#图形化参考网址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哈希和布隆过滤器

哈希 布隆过滤器 一致性哈希

Linux-进程间通信:System V消息队列

目录 System V IPC概述标识符与IPC Key System V消息队列创建或打开一个消息队列发送消息接收消息控制消息队列1、IPC_STAT2、IPC_SET3、IPC_RMID 查看系统当前的消息队列代码示例 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组用于在 Unix-like 操作…

数据分析(3)

数据分析&#xff08;3&#xff09; 索引和数据筛选 在我们导入数据将其存储在data变量中后&#xff0c;接下来就要开始对其进行操作了&#xff0c;要对指定的数据进行操作&#xff0c;首先要在一堆数据中确定它&#xff0c;因此需要索引 import pandas as pd data pd.read…

3D模型人物换装系统(五 模型核批之后模型uv不正确)模型UV不正确

3D模型人物换装系统&#xff08;五 模型核批之后模型uv不正确&#xff09;模型UV不正确 介绍展示Maya导入查看uvUnity中测试分析没合批为什么没有问题总结 介绍 最近在公司里给公司做模型优化合批的时候发现了模型的uv在合批之后无法正常展示&#xff0c;这里找了很多的原因&a…

算法 第44天 动态规划6

518 零钱对换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 …

牛客网:环形链表的约瑟夫问题

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f3dd;1.问题描述&#xff1a; 前言&#xff1a; 约瑟夫问题 有很多种解决办法&#xff0c;下面我们用链表进行解题 题目链…

【H4012】3.3V5V12V24V30V,3.5A大电流温度低 高效同步降压芯片IC DC-DC

您提到的“3.3V, 5V, 12V, 24V, 30V, 3.5A 高效同步降压芯片IC DC-DC”是指一种能够将较高电压&#xff08;例如24V或30V&#xff09;降至较低电压&#xff08;例如3.3V, 5V或12V&#xff09;的直流-直流&#xff08;DC-DC&#xff09;转换器。这种转换器通常使用同步降压技术&…

Springboot项目中,异步编程底层实现原理详解(二)

本系列文章简介&#xff1a; 在现代的开发中&#xff0c;异步编程已经成为了必备的技能。随着计算机性能的提升和多核处理器的普及&#xff0c;异步编程可以充分利用系统资源&#xff0c;提高程序的性能和响应速度。在Spring Boot项目中&#xff0c;异步编程也得到了广泛的应用…

短视频流媒体平台的系统设计

1. 功能需求: 我们的系统有两类参与者 内容创作者 •上传任何类型的视频&#xff08;格式编解码器&#xff09;•视频可以被删除•视频元数据•必填项: 标题&#xff0c;作者&#xff0c;描述•选填项: 分类/标签列表•可以随时更新•当视频对观众可用时&#xff0c;向内容创作…

力扣110. 平衡二叉树

思路&#xff1a;与二叉树最大高度类似&#xff0c;但是这里需要返回 -1 的高度来标识不是平衡二叉树&#xff0c;判断左右子树的高度相差大于1则不平衡&#xff0c;否则就是平衡。 class Solution {public boolean isBalanced(TreeNode root) {int ans func(root);if(ans >…

【人工智能基础】状态空间搜索

状态空间法 状态空间&#xff1a;一个问题全部可能的状态以及其关系的集合。 状态空间图&#xff1a;以图的形式表示问题的状态空间&#xff0c;节点对应状态&#xff0c;边对应状态转移算子&#xff0c;边上的权对应转移所需的代价 问题的解&#xff1a;是从最开始状态到目…

python项目练习——28.自动抢火车票脚本

确定抢购信息: 出发站:例如,"北京"到达站:例如,"上海"出发日期:例如,"2024-05-01"确定登录12306账号信息: 用户名密码环境准备: 安装Python编程环境安装相关第三方库:requests、selenium等网页自动化登录: 使用Selenium模拟浏览器操作…

聊聊路径规划算法(二)——图搜索法

图搜索法通过利用已有的环境地图和版图中的障碍物等数据信息建立&#xff0c;由起点至结束点的可行路线。一般分为深度最优和广度最优二种走向。深度优先算法优先拓展搜索深度较大的节点&#xff0c;因此能够更迅速的获得下一个可行路径&#xff0c;不过深度优先算法获取的第一…

Adobe Firefly是否将重新定义AI视频编辑领域?|TodayAI

Adobe最近发布了一段令人瞩目的视频&#xff0c;详细展示了其最新推出的Adobe Firefly视频模型。这一模型集成了尖端的生成式人工智能技术&#xff0c;带来了一系列颠覆性的视频编辑功能&#xff0c;引发了业界的广泛关注和讨论。 视频中的旁白充满热情地宣布&#xff1a;“Ad…

Rabbit加密算法:性能与安全的完美结合

title: Rabbit加密算法&#xff1a;性能与安全的完美结合 date: 2024/4/19 19:51:30 updated: 2024/4/19 19:51:30 tags: Rabbit加密对称加密流密码密钥调度安全分析实际应用加密算法 第一章&#xff1a;引言 1. 加密算法的基本概念和应用 加密算法是一种通过对数据进行转换…

【C++】4.类和对象(下)

一、再谈构造函数 1.1、初始化列表 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟一个放在括号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(yea…

Llama3本地部署实现模型对话

1. 从github下载目录文件 https://github.com/meta-llama/llama3 使用git下载或者直接从github项目地址下载压缩包文件 git clone https://github.com/meta-llama/llama3.git2.申请模型下载链接 到Meta Llama website填写表格申请,国家貌似得填写外国,组织随便填写即可 3.…

爬虫 Selector 选择器查找元素

// <!--jsoup解析工具所需依赖--> // <dependency> // <groupId>org.jsoup</groupId> // <artifactId>jsoup</artifactId> // <version>1.10.3</version> // </depende…

Linux - sed (stream editor)

替换 my.yaml 的 ‘t’ 为 ‘AAA’ sed s/t/AAA/g my.yaml sed -n /^[as]/p my.yaml 这个命令的 -n 选项表示不自动打印每一行&#xff0c;/^[as]/p 是一个 sed 命令&#xff0c;/^[as]/ 是你想要匹配的正则表达式&#xff08;所有以 a | s 开头的行&#x…

【漏洞复现】锐捷 EG易网关 phpinfo.view.php 信息泄露漏洞

0x01 产品简介 锐捷EG易网关是一款综合网关产品&#xff0c;集成了先进的软硬件体系构架&#xff0c;并配备了DPI深入分析引擎、行为分析/管理引擎。这款产品能在保证网络出口高效转发的基础上&#xff0c;提供专业的流控功能、出色的URL过滤以及本地化的日志存储/审计服务。 …