【Day44】代码随想录之动态规划完全背包_518. 零钱兑换 II_377. 组合总和 Ⅳ

文章目录

      • 动态规划理论基础
        • 动规五部曲:
        • 出现结果不正确:
      • 518. 零钱兑换 II
      • 377. 组合总和 Ⅳ

动态规划理论基础

动规五部曲:
  1. 确定dp数组 下标及dp[i] 的含义。
  2. 递推公式:比如斐波那契数列 dp[i] = dp[i-1] + dp[i-2]。
  3. 初始化dp数组。
  4. 确定遍历顺序:从前到后or其他。
  5. 打印。
出现结果不正确:
  1. 打印dp日志和自己想的一样:递推公式、初始化或者遍历顺序出错。
  2. 打印dp日志和自己想的不一样:代码实现细节出现问题。

518. 零钱兑换 II

参考文档:代码随想录

分析:

  1. 0-1背包每个物品只有一个,内层循环体的遍历顺序是从大到小,保证每个物品只放入一个。
  2. 完全背包每个物品有无限个,内层循环体的遍历顺序是从小到大,因为之前加入的物品之后还可以重复加入。而且完全背包先背包后物品和先物品后背包都是可以的,因为无论哪一种都可以获得当前元素的值。
  3. 完全背包for循环的顺序是任意的,但是按照先背包再物品的顺序得到的结果大于真实值,分析可知结果是排列,有重复,需要的是组合。所以必须按照先物品再背包的顺序,在背包的循环体中表示的零钱coins[i]放入不同容量背包的方法个数,由于j的不断变化,对于dp[j]的更新是沿着背包改变。

代码:

class Solution {
public:int change(int amount, vector<int>& coins) {//dp[j] = amount为j的硬币组合个数//dp[j] += dp[j-coins[i]];//初始化:dp[0] = 0,其余为0vector<int> dp(amount+1, 0);dp[0] = 1;for(int i = 0; i < coins.size(); i++){for(int j = coins[i]; j <= amount; j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
};

377. 组合总和 Ⅳ

参考文档:代码随想录

分析:
由377.组合总和Ⅳ可知本题属于动态规划的完全背包的求解排列个数,for循环需要先背包再物品。

代码:

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {//dp[j]:target为j的排列个数//dp[j] += dp[j-nums[i]];//dp[0] = 1, 其余为0//求解的是排列数,顺序不同的序列是不同的组合,先背包再物品vector<double> dp(target+1, 0);dp[0] = 1;for(int i = 1; i <= target; i++){for(int j = 0; j < nums.size(); j++){//dp[i] + dp[i - nums[j]] < INT_MAXif(i >= nums[j]) dp[i] += dp[i-nums[j]];}}return dp[target];}
};

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

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

相关文章

代码随想录 Leetcode56. 合并区间

题目&#xff1a; 代码(首刷自解 2024年2月18日&#xff09;&#xff1a; 这题与气球扎针&#xff0c;删除重复的大体逻辑相似。需要额外定义些变量来存储头尾 class Solution { private:const static bool cmp(vector<int>& a, vector<int>& b) {return …

001 QGIS介绍

Quantum GIS&#xff08;QGIS&#xff09;是开源地理信息系统桌面软件&#xff0c;使用GNU&#xff08;General Public License&#xff09;授权&#xff0c; 属于 Open Source eospatial Foundation&#xff08;OSGeo&#xff09;的官方计划。在 GNU 授权下&#xff0c;开发者…

Postman路径修改

默认安装好Postman之后&#xff0c;默认路径在&#xff1a;C:\Users\用户名\AppData\Local\Postman。 修改路径只需要将整个文件夹拷贝到需要移动的位置即可&#xff0c;然后重新创建一个快捷方式。再删除原来路径的文件夹。

使用消息中间件实现系统间的异步通信和解耦

​​​​​​​目录 引言 一. 选择合适的消息中间件 二. 定义消息格式和通信协议 1. 定义消息格式 消息头 消息体 2. 定义通信协议 发送消息 接收消息 消息处理 3. 示例代码 定义消息格式 发送消息 接收消息 三、发布-订阅模式 1. 定义发布-订阅模式 2. 示例代…

C++ //练习 7.29 修改你的Screen类,令move、set和display函数返回Screen并检查程序的运行结果,在上一个练习中你的推测正确吗?

C Primer&#xff08;第5版&#xff09; 练习 7.29 练习 7.29 修改你的Screen类&#xff0c;令move、set和display函数返回Screen并检查程序的运行结果&#xff0c;在上一个练习中你的推测正确吗&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; …

RIP协议详解

​RIP是最早的动态路由协议&#xff0c;虽然已经过时并且很少使用&#xff0c;但是可以通过学习RIP并且和ospf等现在正在使用的路由协议对比&#xff0c;了解其工作原理和过时原因&#xff0c;具有很强的学习性。 一、RIP协议简介 RIP&#xff08;Routing Information Protoc…

(OpenCV)图片拼接

前言 图片拼接在许多领域都有广泛的应用&#xff0c;包括但不限于以下几个方面&#xff1a; 全景摄影&#xff1a;在摄影中&#xff0c;通过将多张照片拼接在一起可以实现全景照片的效果。这在旅游景点、房地产展示等领域有着广泛的应用&#xff0c;能够提供更加生动、真实的视…

Bpmn-js 属性控制

我们可以通过bpmn-js来访问对应的BPMN图例的属性信息。对应的流程图中的每个图例元素&#xff08;如开始、结束、中间/边界事件等都通过businessObject属性存储对基础BPMN元素的引用。业务对象是从BPMN 2.0 XML导入并在导出过程中序列化的实际元素。使用业务对象来读取和写入BP…

如何减少HTTP请求次数

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 如何减少HTTP请求次数? 减少 HTTP 请求次数自然也就提升了 HTTP 性能&#xff0c;可以从这 3 个方面入手: 减少重定向请求次数合并请求延迟发送请求 减少重定向请求次数 我们先来看看什么是重定向请…

美相关 APT 组织分析报告

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1AsysdggUIbvB3PZ41MaJaQ?pwd8euh 提取码&#xff1a;8euh

Debug Monitor中断详细解析

文章目录 0 基本术语1 相关寄存器和指令1.1 Debug Halting Control and Status Register (DHCSR), 0xE000EDF01.2 Debug Exception and Monitor Control Register (DEMCR), 0xE000EDFC1.3 Debug Fault Status Register, DFSR, 0xE000ED301.4 BKPT指令 2 Debug Monitor中断示例2…

DNS域名解析过程、工具、文件配置

目录 DNS介绍 DNS域名层次结构 DNS域名解析过程 递归查询和迭代查询 DNS 查询的命令行工具&#xff1a;host、dig、nslookup host 语法 参数和选项 示例用法 dig 语法 参数和选项 示例用法 nslookup 语法 参数和选项 交互式命令 示例用法 配置 DNS 客户端 DNS介…

解读OpenAI视频生成模型Sora背后的原理:Diffusion Transformer

Diffusion Models视频生成-博客汇总 前言&#xff1a;OpenAI最近推出的视频生成模型Sora在效果上实现了真正的遥遥领先&#xff0c;很多博主都介绍过Sora&#xff0c;但是深入解读背后原理的博客却非常少。Sora的原理最主要的是核心模型主干《Scalable Diffusion Models with T…

Code Composer Studio (CCS) - Breakpoint (断点)

Code Composer Studio [CCS] - Breakpoint [断点] 1. BreakpointReferences 1. Breakpoint 选中断点右键 -> Breakpoint Properties… Skip Count&#xff1a;跳过断点总数&#xff0c;在断点执行之前设置总数 Current Count&#xff1a;当前跳过断电累计值 References […

xtu oj 1215 A+B V

题目描述 小明很喜欢做ab&#xff0c;他但经常忘记进位&#xff0c;所以他算881290,而不是100。 现在你给了小明一些ab的算式&#xff0c;请问他算出来会是什么&#xff1f; 输入 第一行是一个整数K&#xff0c;表示样例的个数。 每个样例占一行&#xff0c;为两个整数a,b&a…

CCF编程能力等级认证GESP—C++7级—20231209

CCF编程能力等级认证GESP—C7级—20231209 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)商品交易纸牌游戏 答案及解析单选题判断题编程题1编程题2 单选题…

深度探索Python集合:从基本操作到高级用法

在Python编程中&#xff0c;集合(Set)作为一种高效且功能强大的内置数据结构&#xff0c;常用于处理不包含重复元素的无序数据集合。本文将详述Python集合的基本操作、进阶技巧以及在实际场景中的应用。 一、集合基础 Python集合初始化可通过大括号 {} 或者 set() 函数实现&a…

Vue实现多个input输入,光标自动聚焦到下一个input

遇到一个需求&#xff0c;需要实现和移动端短信输入一样&#xff0c;输入内容后&#xff0c;光标会进入下一个输入框 需要用到2个事件 keydown事件发生在键盘的键被按下的时候 keyup 事件在按键被释放的时候触发 <template><div class"box"><el-fo…

(ruoyi-vue3.8.6版本基础上)升级Spring Boot 3.x时遇到的问题与解决办法

升级Spring Boot 3.x时遇到的问题与解决办法 在升级Spring Boot应用到3.x版本的过程中,可能会遇到一系列的依赖、配置及JDK版本相关问题。本文将列出几个常见问题及其对应的解决方案。 问题一:javax.xml.bind.JAXBException异常 问题描述 在更新Spring Boot依赖后,如果缺…

OpenAI重磅发布Sora——首个视频生成模型:利用文本-视频人工智能将想象变为现实

想象一下&#xff0c;现在你有一段文本话描述的故事&#xff0c;通过输入这段文本&#xff0c;就可以立刻展开一个生动详细的视频。这就是 OpenAI 神奇的 Sora&#xff0c;一个革命性的文本到视频的 AI 模型。Sora于2024年2月推出&#xff0c;凭借其仅凭文字提示就能生成现实和…