算法学习 | day38/60 零钱兑换/组合总和IV

        今天主要是完全背包的一个专题,完全背包相对于 01 背包,主要区别在于物品可以取出无限次,其他关于 dp 的状态定义和状态转移都是一样的,体现在代码上,最重要的是遍历的一个先后顺序以及遍历开始的位置。

一、题目打卡

        1.1 零钱兑换

        题目链接:. - 力扣(LeetCode)

class Solution {
public:int change(int amount, vector<int>& coins) {vector<int> dp(amount+1,0); // 用 i 种硬币可以组成 amont 的数量dp[0] = 1;for(int i = 0;i < coins.size();i++){// for(int it : dp){//     cout << it << " ";// }// cout << endl;for(int j = coins[i];j <= amount;j++){dp[j] = dp[j] + dp[j-coins[i]];}// cout << "----------------" << endl;// for(int it : dp){//     cout << it << " ";// }// cout << endl;// cout << "----------------" << endl;}return dp[amount];}
};

        这里需要注意一件事,就是遍历的时候,因为这里是一维数组,所以遍历的时候需要从物品开始,原因是一维数组无法存储上一次遍历过的信息,具体的过程看到一个评论觉得写的很好:

         这里需要注意,不管遍历的顺序如何,dp 所开辟的大小和状态的定义都是不变的,从上面这个图其实也可以看出来,如果先遍历的是背包的容量的话,最终就会变成一个组合问题,而事实上,对于选择物品来说,并不存在顺序上的不同,所以这样是不可取的,而事实上,对于最原始的完全背包问题,遍历的顺序是没有关系的,因为原始的完全背包问题,计算的是最大的物品价值,这时候和顺序也是没有关系的,而且还有一点值得注意,那就是只有一维数组写的时候才会存在这样遍历的问题,而对于二维的矩阵,是不存在这个问题的,因为不存在数组的覆盖。

        1.2 组合总和IV

        题目链接:. - 力扣(LeetCode)

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<double> dp(target+1,0);dp[0] = 1;// for(int i = 0 ; i < nums.size();i++){//     for(int j = nums[i] ; j <= target ; j++){//         dp[j] += dp[j - nums[i]];//     }// }for(int j = 0 ; j <= target ; j++){for(int i = 0 ; i < nums.size();i++){// if(nums[i] <= j && dp[j] + dp[j - nums[i]] < INT_MAX) dp[j] += dp[j - nums[i]];// 这个判断条件如果double ,第二个可以省略,而且就算是int 这个也不对,看我解析if(nums[i] <= j && dp[j] + dp[j - nums[i]] < INT_MAX) dp[j] += dp[j - nums[i]];}}return dp[target];}
};

        这个题就是上面那种情况,因为需要求的是组合的数量,所以需要先遍历背包的容量,这个题目还有一个要注意的是越界的问题,我这里直接将数定义为了 double 类型,或者是在哪个条件里面,可以写 dp[j] < INT_MAX - dp[j - nums[i]] ,注意我那个代码里面那样是不对的,因为这样会先计算和,这样如果越界了还是会报错,正确的应该上面那一句的写法,这里就当警示自己了。

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

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

相关文章

Canal的使用场景!!!

1、保持redis和mysql连接的一致性&#xff1a;通常使用延迟双删功能&#xff08;具有弊端&#xff09; 解决方案&#xff1a;可以使用canal监听数据库的变化&#xff08;删改&#xff09;&#xff0c;一旦出现此类操作&#xff0c;立即删除redis中的对应数据&#xff0c;直至下…

离线下载百度paddlepaddle框架

1、安装python3 和pip3 2、修改pip源 [rootrocky9 .pip]# pwd /root/.pip [rootrocky9 .pip]# cat pip.conf [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple/ [install] trusted-hostpypi.tuna.tsinghua.edu.cn3、下载GPU版本&#xff0c;CUDA 12.0 python…

从0到1实现RPC | 08 异常码和异常超时

定义RpcException RpcException继承RuntimeException&#xff0c;定义特定错误码&#xff0c;专用于远程过程调用过程中产生的异常。 X: 技术类异常Y: 业务类异常Z: 未知异常 在使用时&#xff0c;使用rpc专用的异常错误码&#xff0c;方便定位排查。 超时异常重试 在发生网…

【汇编语言实战】统计个数(创新版)

内存中有10个分布在0至100内的正整数&#xff0c; 求小于60的数的个数num1&#xff0c;大于或等于60且小于80的数的个数num2&#xff0c;大于或等于80且小于100的数的个数num3 C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{1, 20, 95, 32,…

【ZZULIOJ】1047: 对数表(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入两个正整数m和n&#xff0c;输出m到n之间每个整数的自然对数。 输入 输入包括两个整数m和n(m<n)&#xff0c;之间用一个空格隔开。 输出 每行输出一个整数及其对数&#xff0c;整数占4…

基于Java+SpringBoot+Vue游戏账号估价交易平台(源码+文档+部署+讲解)

一.系统概述 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对游戏账号估价交易的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用…

基于SSM的课程进度管理系统的设计与实现

摘要&#xff1a; 在信息技术飞速发展的当下&#xff0c; 借助互联网平台以及功能性系统的支持&#xff0c;人们获取信息以及信息整合的通道越来越多元化。系统和平台帮助人们实现了信息的共享&#xff0c;同时帮助人们更加直观的看到成果和过程的变动。以课程进度管理为例&…

服务器数据恢复—ext3文件系统下raid5数据恢复案例

服务器数据恢复环境&故障情况&#xff1a; 某企业光纤存储上有一组由16块硬盘组建的raid5阵列。管理员发现该光纤存储上的卷无法挂载&#xff0c;经过检查发现raid5阵列中有2块硬盘离线&#xff0c;于是联系我们数据恢复中心要求数据恢复工程师到现场恢复服务器存储上的数据…

[AIGC] Java List和Map常用API以及其Python实现方式对照介绍

Java和Python作为当今非常浅显易懂的编程语言&#xff0c;其数据结构中对于List和Map&#xff08;Java&#xff09;或List和Dict&#xff08;Python&#xff09;的操作无疑是每个程序员都非常必需的知识。本文将介绍在Java中对List和Map常用的一些操作&#xff0c;并给出在Pyth…

Canal--->准备MySql主数据库---->安装canal

一、安装主数据库 1.在服务器新建文件夹 mysql/data&#xff0c;新建文件 mysql/conf.d/my.cnf 其中my.cnf 内容如下 [mysqld] log_timestampsSYSTEM default-time-zone8:00 server-id1 log-binmysql-bin binlog-do-db mall # 要监听的库 binlog_formatROW2.启动数据库 do…

数据交换格式

一、什么是数据交换格式 在计算机的不同程序之间&#xff0c;或者不同的编程语言之间进行交换数据&#xff0c;也需要一种大家都能听得懂得‘语言’&#xff0c;这就是数据交换格式&#xff0c;它通过文本以特定的形式来进行描述数据。 二、常用的几种数据交换格式 客户端常…

2024最新ros学习教程与机械臂抓取相关算法论文项目大全

一、ros教程 https://fishros.com/ 鱼香ros https://wiki.ros.org/ https://turtlebot.github.io/turtlebot4-user-manual/ Turtlebot https://www.openrobotics.org/ 二、抓取网址 https://moveit.ros.org/ 有项目&#xff0c;有教程&#xff0c;有deep_grasp (gpd) https:…

C++ //练习 11.32 使用上一题定义的multimap编写一个程序,按字典打印作者列表和他们的作品。

C Primer&#xff08;第5版&#xff09; 练习 11.32 练习 11.32 使用上一题定义的multimap编写一个程序&#xff0c;按字典打印作者列表和他们的作品。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************…

Vue2 —— 学习(五)

一、生命周期 &#xff08;一&#xff09;引入案例 我们想让一行文字按一定频率逐渐变得透明 1. Vue 实例外写法 函数写在 Vue 实例外面也能实现但是不推荐 <body><div id"root"><h2 :style"{opacity}">欢迎学习Vue</h2><…

Python论文多图绘制+代码+代码解读+绘图经验分享(3)

目录 功能说明【说明一些代码模块的从属关系的图】【代码注释】代码功能描述代码内容代码的输出&#xff0c;总结 功能说明 在做一些仿真实验时&#xff0c;得到的实验系列结果图会有很多。我们需要讲这一系列的图拼接起来&#xff0c;今天我们就来一起学习如何将一系列的图放…

定时器的实现

一、定时器是什么 ? 定时器是组织大量定时任务的模块。定时器是项目底层基础的一个模块&#xff0c;很多业务场景中都需要解决一个问题&#xff1a;延时处理某些任务。 二、定时器的应用 心跳检测 keepalive。应用层发送心跳包 。 倒计时。其他需要延时处理的功能。 三、定时…

大型连锁企业异地组网稳定性提升指南

随着时代的发展&#xff0c;连锁企业在网络方面面临着越来越多的挑战。这些企业在不同的地理位置设有分支机构和门店&#xff0c;可能是同城也可能是异地&#xff0c;因此需要确保各个地点之间的网络连接稳定可靠。然而&#xff0c;由于不同地区网络基础设施、延迟和带宽等方面…

sort和sorted的区别使用

llist(map(int,input().split())) bsorted(l,reverseFalse)#reverseTrue是降序&#xff0c;False是降序 print(b) #sorted&#xff08;&#xff09;函数是将一个排好序的列表赋给另一变量 a.sort(reverseFalse)#用法和sorted一样 #只不过sort函数直接将列表进行排序不能赋给其他…

代码随想录:栈与队列4-6

20.有效的括号 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一…

打卡--MySQL8.0 四 (索引及执行计划)

一、索引的创建与使用 1、索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 &#xff08;1&#xff09;从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 &#xff08;…