【Leetcode每日一题】 01背包 - DP41 【模板】01背包(难度⭐⭐)(80)

1. 题目解析

题目链接:DP41 【模板】01背包

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

第一问:不超过总体积的背包问题

1. 状态表示

  • dp[i][j] 表示:从前 i 个物品中挑选,总体积不超过 j 的所有选法中,能挑选出来的最大价值。

2. 状态转移方程

  • 不选第 i 个物品:此时 dp[i][j] 等于从前 i-1 个物品中挑选,并且总体积不超过 j 的最大价值,即 dp[i][j] = dp[i - 1][j]
  • 选择第 i 个物品:需要确保选择该物品后总体积不超过 j,即 j >= v[i]。此时 dp[i][j] 等于从前 i-1 个物品中挑选,总体积不超过 j - v[i] 的最大价值加上第 i 个物品的价值,即 dp[i][j] = dp[i - 1][j - v[i]] + w[i]

综合两种情况,状态转移方程为:

3. 初始化

  • 为了简化边界条件,我们在数组顶部额外增加一行,并将这一行初始化为 0。因为不选择任何物品时,无论背包体积如何,价值都是 0。

4. 填表顺序

  • 根据状态转移方程,我们从上到下、从左到右填表即可。

5. 返回值

  • 最终返回 dp[n][V],即从 n 个物品中选择,总体积不超过 V 的最大价值。
第二问:正好总体积的背包问题

1. 状态表示

  • dp[i][j] 表示:从前 i 个物品中挑选,总体积正好等于 j 的所有选法中,能挑选出来的最大价值。

2. 状态转移方程

  • 类似地,我们有不选和选第 i 个物品两种情况。但这里需要注意的是,当选择第 i 个物品时,除了需要判断 j >= v[i],还需要确保 dp[i - 1][j - v[i]] 是有效的(即不是初始化的无效值)。

状态转移方程为:

3. 初始化

  • 同样,我们在数组顶部增加一行。第一行除了第一个元素(对应体积为 0 的情况)为 0 外,其余元素都设置为一个表示无效的初始值(如 -1)。

4. 填表顺序

  • 依然是从上到下、从左到右填表。

5. 返回值

  • 在返回最终答案前,需要判断 dp[n][V] 是否为初始值。如果是,则表示无法凑齐体积为 V 的背包;否则,返回 dp[n][V]

3.代码编写

#include <iostream>
#include <cstring>
using namespace std;const int N = 1010;
int n, V, v[N], w[N];
int dp[N][N];int main() {cin >> n >> V;for (int i = 1; i <= n; i++)cin >> v[i] >> w[i];//第一问for (int i = 1; i <= n; i++) {for (int j = 0; j <= V; j++) {//以i结尾不选idp[i][j] = dp[i - 1][j];if (j >= v[i]) { //剩余空间足够//在前i-1个取出背包剩余j-v[i]最大值,dp[i][j]就代表前i个剩余J时的最大值dp[i][j] = max(dp[i][j], dp[i - 1][j - v[i]] + w[i]);}}}cout << dp[n][V] << endl;//第二问memset(dp, 0, sizeof dp);for (int j = 1; j <= V;j++) dp[0][j] = -1;//我们约定当前面凑不出刚好为j容量的物品是价值为-1,这里初始化表示取前0个物品,使得容量恰好为j,当j>0这不可能,所以初始化为-1for (int i = 1; i <= n; i++) {for (int j = 0; j <= V; j++) {//以i结尾不选idp[i][j] = dp[i - 1][j];if (j >= v[i] && dp[i - 1][j - v[i]] != -1) { //剩余空间足够//在前i-1个取出背包剩余j-v[i]最大值,dp[i][j]就代表前i个剩余J时的最大值dp[i][j] = max(dp[i][j], dp[i - 1][j - v[i]] + w[i]);}}}cout << (dp[n][V] == -1 ? 0 : dp[n][V]) << endl;return 0;
}

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

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

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

相关文章

汇编语言实验八

目录 一、实验目的 二、实验内容 三&#xff0e;实验步骤以及结果 1、阅读monthtab.asm 程序&#xff0c;要求写出该程序功能&#xff0c;并在实验报告中画出其程序流程图 2.编写一段程序&#xff0c;要求在长度为20的数组&#xff08;无符号数&#xff09;中&#xff0c;…

LabVIEW与C#相互调用dll

C#调用LabVIEW创建的dll 我先讲LabVIEW创建自己的.net类库的方法吧&#xff0c;重点是创建&#xff0c;C#调用的步骤&#xff0c;大家可能都很熟悉了。 1、创建LabVIEW项目&#xff0c;并创建一个简单的add.vi&#xff0c;内容就是abc&#xff0c;各个接线端都正确连接就好。 …

云层之间穿梭特效视频转场PR模板素材

12 个超赞的 Premiere Pro 云层穿梭特效视频转场模板 https://prmuban.com/39056.html &#x1f4fd; 你是否正在寻找一种方法&#xff0c;让你的视频更酷、更时尚、更吸引人&#xff1f;今天推荐的12个逼真的云层穿梭特效视频转场模板&#xff0c;绝对能为你的作品锦上添花 ✨…

智赢选品,OZON数据分析选品利器丨萌啦OZON数据

在电商行业的激烈竞争中&#xff0c;如何快速准确地把握市场动态、洞察消费者需求、实现精准选品&#xff0c;是每个电商卖家都面临的挑战。而在这个数据驱动的时代&#xff0c;一款强大的数据分析工具无疑是电商卖家们的得力助手。今天&#xff0c;我们就来聊聊这样一款选品利…

我也认为说 360 无法卸载这一说法,是一个 “彻头彻尾的谣言”

最近&#xff0c;360 公司董事长周鸿祎发布视频回应了 360 无法卸载这一说法&#xff0c;称其是一个 “彻头彻尾的谣言”。他解释道&#xff0c;360 软件完全可以卸载&#xff0c;在设置里面有卸载的入口&#xff0c;通过软件管家也可以正常卸载。不能卸载的说法完全是断章取义…

【UIDynamic-动力学-UIPushBehavior-推行为 Objective-C语言】

一、接下来,我们来说这个,推行为, 1.推行为,首先,它叫做UIPushBehavior, 这个里边呢,又分为持续推力、瞬时推力, 我们新建一个项目,叫做:13-推行为 我们这个里边,还是先来一个redView, UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(100,100,…

【开发】利用SSH端口转发通过阿里云服务器访问实验室设备

文章目录 写在前面公网服务器与实验室服务器连通性公网服务器ping实验室实验室ping公网服务器SSH隧道转发 写在前面 最近实验室搬家&#xff0c;导致无法访问内网&#xff0c;之前搭建的zerotier组网成功利用手机热点访问&#xff0c;但是无奈zerotier的不稳定导致开发效率低&…

B端产品竞品分析-总结版

B端竞品分析的难点 分析维度-业务逻辑复杂 B端产品与C端产品业务模型不同&#xff0c;B端产品主要以业务为导向&#xff0c;因此其业务流程与业务逻辑梳理起来也会较C端产品复杂的多&#xff0c;对于个人能力也有一定的要求&#xff0c;需要我们具备相关领域或行业专业知识。…

猫头虎分享已解决Bug:Array Index Out of Bounds Exception

&#x1f42f; 猫头虎分享已解决Bug&#xff1a;Array Index Out of Bounds Exception &#x1f42f; 摘要 大家好&#xff0c;我是猫头虎&#xff0c;今天我们要聊聊后端开发中经常遇到的一个问题&#xff1a;Array Index Out of Bounds Exception&#xff0c;即 java.lang.…

win10 修改远程桌面端口,在Win10上修改远程桌面端口的要怎么操作

在Windows 10上修改远程桌面端口是一个涉及系统配置的过程&#xff0c;这通常是为了增强安全性或满足特定网络环境的需要。 一、通过注册表编辑器修改远程桌面端口 1. 打开注册表编辑器&#xff1a; - 按下Win R组合键&#xff0c;打开“运行”对话框。 - 在“运行”对话框…

大模型揭秘:AI与CatGPT在实体识别中的创新应用

摘要 尽管大规模语言模型 (LLM) 在各种 NLP 任务上已经取得了 SOTA 性能&#xff0c;但它在 NER 上的性能仍然明显低于监督基线。这是由于 NER 和 LLMs 这两个任务之间的差距&#xff1a;前者本质上是序列标记任务&#xff0c;而后者是文本生成模型。在本文中&#xff0c;我们…

【大数据】—双均线策略(移动平均线)

声明&#xff1a;股市有风险&#xff0c;投资需谨慎&#xff01;本人没有系统学过金融知识&#xff0c;对股票有敬畏之心没有踏入其大门&#xff0c;今天用另外一种方法模拟炒股&#xff0c;后面的模拟的实战全部用同样的数据&#xff0c;最后比较哪种方法赚的钱多。 量化交易…

《2024云安全资源池 能力指南》

《2024云安全资源池 能力指南》这份报告不仅梳理了云安全资源池的发展历程,还深入探讨了其在当前云计算环境下的重要性和必要性。报告详细分析了云安全资源池的市场需求、技术架构、关键技术以及行业应用案例,为政企用户提供了全面的云安全解决方案。通过资料收集、问卷调研、企…

Unity | Shader基础知识(番外:模型的制作流程)

目录 一、前言 二、模型的诞生 三、模型的表面 四、模型的贴图 五、上完材质的模型 六、材质的来源 七、作者的碎碎念 一、前言 up发现&#xff0c;初学程序&#xff0c;除非你是美术&#xff0c;模型出生&#xff0c;要不然对这些都是萌萌哒&#xff08;蒙蒙哒&#x…

从宏基因组中鉴定病毒序列(2)

Introduction 在环境微生物学和生态学研究中&#xff0c;宏基因组学&#xff08;Metagenomics&#xff09;技术的应用已经彻底改变了我们对微生物群落的理解。宏基因组学通过对环境样本中的全部遗传物质进行测序和分析&#xff0c;可以全面揭示微生物群落的组成、功能和相互作…

Modbus转Profibus网关在汽车行业的应用

一、前言 在当前汽车工业的快速发展中&#xff0c;汽车制造商正通过自动化技术实现生产的自动化&#xff0c;目的是提高生产效率和减少成本。Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;应用于汽车行业&#xff0c;主要体现在提升自动化水平、优化数据传输以及实…

刷题之小欧的平均数(卡码网)

小欧的平均数 这道题不看解析的话完全没有思路&#xff0c;连题目都没读明白&#xff0c;甚至看了评论答出来了还是不知道为什么&#xff0c;有知道的朋友可以教教我 #include<iostream> using namespace std;int main() {int x,y,z;cin>>x>>y>>z;//…

【机器学习 复习】第10章 聚类算法

一、概念 1.聚类 &#xff08;1&#xff09;是无监督学习&#xff0c;其实无监督学习就是无中生有&#xff0c;不给你标准答案&#xff08;标签啊啥的&#xff09;&#xff0c;然后让你自己来。 &#xff08;2&#xff09;聚类就是这样&#xff0c;让机器自己根据相似特征把相…

怎么将图片压缩调小?在线压缩图片的4种快捷方法

压缩图片是日常很常用的一个图片处理功能&#xff0c;现在拍摄和制作的图片都比较大&#xff0c;在使用时经常会受到影响。在遇到无法上传、传输过慢的问题时会降低工作效率&#xff0c;所以掌握一招快速压缩图片是非常重要的。通过下面这篇文章来给大家介绍一下在线图片压缩的…

Flutter ffi Failed to lookup symbol

iOS release版本&#xff0c;解决方式参考官方文档&#xff1a;在 iOS 中使用 dart:ffi 调用本地代码 如果debug版本也报这个错误&#xff0c;很可能是有多个.c文件&#xff0c;编译的时候没带上&#xff01; 假设你的ffi模块名字是 c_lib 对于Android端&#xff0c;需要修改…