备战蓝桥杯Day35 - 动态规划 - 01背包问题

问题描述

隐含前提:

1.物体是不可分的,要么装,要么不装,不能只装一部分。

2.物体顶多使用一次。

动态规划思路 

我在b站上看的闫氏dp分析大法的视频,他对dp问题做了总结归纳。

从集合的角度分析dp问题。求出有限集中的最值 / 个数。

分析内容主要包括两部分:

1.状态表示(化零为整):将一些有相似特征的元素化成一个子集,用某一个状态表示。

        1.1 明确集合分类

        1.2 明确题目中要找的属性(最大值 / 最小值 / 个数)

2.状态计算(化整为零):将数据划分为不同的子集。(依据:寻找最后一个不同点)

        2.1 数据不重复

        2.2 数据不遗漏

分析01背包问题

1.集合:

所有只考虑前 i 个物品,且总体积不超过 j 的选法的集合

2.属性:

集合中每个方案的最大值

3. 状态计算:

第一种:所有不选第 i 个物品的集合。

所以要从第1个到第 i - 1 中进行选择,且总体积不超过 j 。 dp[ i ][ j ] = dp[ i-1 ][ j ]

第二种:所以选了第 i 个物品的集合

我们已经选了第 i 个, 所以前 i-1个物品我们要选出最大值,且 前 i-1个物品的总体积为 j - vi。

dp[ i ][ j ] = dp[i-1][j - vi] + wi

这两种情况我们要取最大值。

所以最后状态计算表达式为:

dp[ i ][ j ] = max(dp[ i - 1][ j ], dp[i-1][j - vi] + wi)

代码实现

def knapsack_01(N, V, volumes, values):  # 初始化 dp 数组,dp[i][j] 表示考虑前 i 件物品,在容量为 j 的背包中能够得到的最大价值  dp = [[0 for _ in range(V + 1)] for _ in range(N + 1)]  # 动态规划过程  for i in range(1, N + 1):  for j in range(1, V + 1):  # 如果第 i 件物品的体积大于当前背包容量 j,则不能装入  if volumes[i - 1] > j:  dp[i][j] = dp[i - 1][j]  else:  # 否则考虑放入和不放入两种情况,取较大者  dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - volumes[i - 1]] + values[i - 1])  # 返回最大价值,即所有物品考虑在内,背包容量为 V 的最大价值  return dp[N][V]  # 读取输入  
N, V = map(int, input().split())  
volumes = []  
values = []  
for _ in range(N):  v, w = map(int, input().split())  volumes.append(v)  values.append(w)  # 输出最大价值  
print(knapsack_01(N, V, volumes, values))

读取输入这样写就很妙,学会了。一点一点的进步吧!

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

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

相关文章

[python]bar_chart_race设置日期格式

1、设置日期标签的时间格式 # 设置日期格式,默认为%Y-%m-%dbcr.bar_chart_race(df, covid19_horiz.gif, period_fmt%b %-d, %Y) 2、更改日期标签为数值 # 设置日期标签为数值bcr.bar_chart_race(df.reset_index(dropTrue), covid19_horiz.gif, interpolate_period…

推荐一款.NET开源跨平台的开箱即用的DNS服务器软件

前言 今天要给大家推荐一款.NET开源跨平台的开箱即用的DNS服务器软件(用于提供 DNS 解析服务):Technitium DNS Server。 项目介绍 Technitium DNS Server是一个开源的权威和递归DNS服务器,可以用于自主托管DNS服务器以提升隐私和…

Linux收到一个网络包是怎么处理的?

目录 摘要 ​编辑 1 从网卡开始 2 硬中断,有点短 2.1 Game Over 3 接力——软中断 3.1 NET_RX_SOFTIRQ 软中断的开始 3.2 数据包到了协议栈 3.3 网络层处理 3.4 传输层处理 4 应用层的处理 5 总结 摘要 一个网络包的接收始于网卡,经层层协议栈…

利用Jmeter工具对服务器,数据库进行性能监控,压测,导出性能测试报告

Jmeter是Apache基金会旗下的一款免费,开源,轻量级的性能测试工具,主要针对web应用程序客户端/服务器进行性能测试.它可以分别测试静态、动态资源(Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等),它可以通过线程组来模拟数个用户,在一段时间内同时登录服务器,数个用…

LeetCode-热题100:42. 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入: height [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解释: 上面是由数组 [0,1,0,2,1,…

CICD流水线(ali)

后端CICD 一、打开云效流水线,创建流水线

HarmonyOS NEXT应用开发之听歌识曲水波纹特效案例

介绍 在很多应用中,会出现点击按钮出现水波纹的特效。 效果图预览 使用说明 进入页面,点击按钮,触发水波纹动画。再次点击按钮,停止水波纹动画。 实现思路 本例涉及的关键特性和实现方案如下: 要实现存在两个连续…

TikTok云手机是什么原理?

社交媒体的快速发展和普及,TikTok已成为全球最受欢迎的短视频平台之一,吸引了数以亿计的用户。在TikTok上,许多用户和内容创作者都希望能够更灵活地管理和运营多个账号,这就需要借助云手机技术。那么,TikTok云手机究竟…

集合系列(十三) -红黑树实现分析详解

一、故事的起因 JDK1.8最重要的就是引入了红黑树的设计(当冲突的链表长度超过8个的时候),为什么要这样设计呢?好处就是避免在最极端的情况下冲突链表变得很长很长,在查询的时候,效率会非常慢。 红黑树查询&…

uniapp自定义导航栏左中右内容和图标,以及点击事件

uniapp自定义导航栏左中右内容和图标&#xff0c;以及点击事件 效果&#xff1a; 页面&#xff1a; <view class"navigation-bar"><view class"navigation-bar-left" click"navigateBack"><u-icon name"arrow-left"…

数学建模(灰色关联度 python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 案例&#xff1a;哪些原因影响结婚率 数据标准化&#xff1a; 灰色关联度系数&#xff1a; 完整代码&#xff1a; 结果&#xff1a; 介绍&#xff1a; 灰色关联度是一种多指标综合评价方法&#xff0c;用于分析和评价不同指标之…

【DP】01背包问题与完全背包问题

一、01背包问题 有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&…

Email API有哪些主要功能?如何用API发信?

Email API的安全性如何保障&#xff1f;如何选择API进行集成&#xff1f; Email API简化了电子邮件交互的复杂性&#xff0c;让开发者能够轻松地将邮件功能集成到他们的应用中。那么&#xff0c;Email API究竟有哪些主要功能呢&#xff1f;接下来&#xff0c;AokSend将一一探讨…

在Linux搭建Emlog博客结合内网穿透实现公网访问本地个人网站

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

小迪安全46WEB 攻防-通用漏洞PHP 反序列化原生类漏洞绕过公私有属性

#知识点&#xff1a; 1、反序列化魔术方法全解 2、反序列化变量属性全解 3、反序列化魔术方法原生类 4、反序列化语言特性漏洞绕过 -其他魔术方法 -共有&私有&保护 -语言模式方法漏洞 -原生类获取利用配合 #反序列化利用大概分类三类 -魔术方法的调用…

Backend - Echarts(柱状条形图)

一、下载并安装 &#xff08;一&#xff09;官网 https://echarts.apache.org/zh/index.html &#xff08;二&#xff09;下载依赖 1. 官网里选择下载方式 https://echarts.apache.org/handbook/zh/basics/download/ 2. 官网github方式下载 https://github.com/apache/echa…

如何利用AI助力你的工作,学会这些AI操作秘密,让AI给你打工赚钱

随着科技的进步,AI已逐渐融入我们日常生活的方方面面,成为提升工作效率、拓展个人能力的得力助手。在这个时代,不是AI替代我们,而是那些懂得利用AI的同事将更具竞争力。学会让AI为你“打工”,不仅能够节省时间、提升效率,还能帮助我们发现新机会,实现创新。 AI的优势…

数据结构——认识二叉树

这是一篇回顾二叉树概念的文章 前言&#xff1a;一、了解树形结构1.2 树的定义2.2 树的相关概念2.2 树的表示形式 二、了解二叉树结构和性质2.1 什么是二叉树&#xff1f;2.2 二叉树的性质2.3 二叉树的遍历2.3 二叉树的应用范围2.5 二叉树的优缺点 三、掌握二叉树的存储结构3.1…

关闭 Microsoft Word 2010 配置窗口

关闭 Microsoft Word 2010 配置窗口 References 出现这种问题&#xff0c;主要是安装时所用账户和目前登陆的账户不为同一个账户造成的。或者你进行过覆盖安装或是重新安装过系统&#xff0c;但是 office 的安装目录没有更改。先激活 Microsoft Office&#xff0c;然后执行下列…

springcloud第4季 负载均衡的介绍3

一 loadbalance 1.1 负载均衡的介绍 使用注解loadbalance&#xff0c;是一个客户端的负载均衡器&#xff1b;通过之前已经从注册中心拉取缓存到本地的服务列表中&#xff0c;获取服务进行轮询负载请求服务列表中的数据。 轮询原理 1.2 loadbalance工作流程 loadBalance工作…