代码随想录 Day38 完全背包问题 LeetCode T70 爬楼梯 T322 零钱兑换 T279 完全平方数

前言

在今天的题目开始之前,让我们来回顾一下之前的知识,动规五部曲

1.确定dp数组含义

2.确定dp数组的递推公式

3.初始化dp数组

4.确定遍历顺序

5.打印dp数组来排错

tips: 1.当求取物品有限的时候用0-1背包,求取物品无限的时候用完全背包

结果是排列还是组合也有说法,当结果是组合的时候,遍历顺序为先物品,后背包,保证无序性

如果先遍历背包,后遍历物品,这个时候求的就是排列数

 

LeetCode T70 爬楼梯

题目链接:70. 爬楼梯 - 力扣(LeetCode)

题目思路:

相信之前看过我文章的友友们应该不陌生这道题,我们之前是使用斐波那契数列的方式来推导递推公式进行操作的,现在我们不妨换个思路,把他想成一个完全背包的问题进行解决,这里我们的背包容量就是n,可选物品就是1和2,我们仍然使用动规五部曲来分析一下.

1.确定dp数组含义

这里的dp数组含义就是装满容量为n的背包的方法数

2.确定dp数组的递推公式

和前面的一样累加即可

dp += dp[j-i]   因为这里价值就是其本身

3.初始化dp数组

这里全部初始化为0即可

4.确定遍历顺序

这里是求排列问题,所以使用先背包后物品来操作

记得遍历物品的时候要从前向后,判断一下i是否大于j在做累加

5.打印dp数组来排错

题目代码:

class Solution {public int climbStairs(int n) {int[] dp = new int[n+1];dp[0] = 1;for(int i = 1;i<=n;i++){for(int j = 1;j<=2;j++){if(i>=j){dp[i] += dp[i-j];}}}return dp[n];}
}

LeetCode T322 零钱兑换

题目链接:322. 零钱兑换 - 力扣(LeetCode)

题目思路:

这题仍然是一个完全背包的问题,不过这里我们要求的是装满背包的最少物品数,这里我们就不能考虑初始化为0了,我们得初始化为一个较大的数,才能够方便我们来覆盖掉之前的数组值

我们下面仍然用动规五部曲来安排一下这道题

1.确定dp数组含义

这里dp[j]的含义就是j容量的数组最小能由几个物品装满

2.确定dp数组的递推公式

dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);

3.初始化dp数组

这里得初始化为int的最大值,有人可能直接一股脑就初始化为0了,那么仔细想想,这样求最小值一直都会是0,只有数足够大才能让小值能覆盖数组中的对应元素

记得dp[0]得赋值为0,不然也操作不了,假设dp[0]没有赋值为0那么后面的int最大值再+1就会越界.

4.确定遍历顺序

先遍历物品,再遍历背包即可

5.打印dp数组来排错

题目代码:

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0] = 0;for (int i = 0; i < coins.length; i++) {//正序遍历:完全背包每个硬币可以选择多次for (int j = coins[i]; j <= amount; j++) {//只有dp[j-coins[i]]不是初始最大值时,该位才有选择的必要if (dp[j - coins[i]] != Integer.MAX_VALUE) {//选择硬币数目最小的情况dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}if(dp[amount]==Integer.MAX_VALUE){return -1;}else{return dp[amount];}}
}

LeetCode T279 完全平方数

题目链接:279. 完全平方数 - 力扣(LeetCode)

题目思路:

只要上题能搞得明白,这题完全没有难度,首先只需要得到小于等于n的所有平方数,来填满这个容量为n的背包,求其最少能装满的即可.下面我们仍然是使用动规五部曲去玩一下.

1.确定dp数组含义

dp[j]:装满背包容量为j的背包最少需要多少平方数

2.确定dp数组的递推公式

和之前一样,dp[j] = Math.min(dp[j],dp[j-i*i]+1);这里的价值为i*i

3.初始化dp数组

dp[0]初始化为0,其他的初始化为Integer.MAX_VALUE即可

4.确定遍历顺序

先背包后数组即可,因为不涉及遍历顺序,所以都行

5.打印dp数组来排错

题目代码:

class Solution {public int numSquares(int n) {int[] dp = new int[n+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0] = 0;for(int i = 1;i*i<=n;i++){for(int j = i*i;j<=n;j++){dp[j] = Math.min(dp[j],dp[j-i*i]+1);}}return dp[n];}
}

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

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

相关文章

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml:

抖音10月榜单有哪些看点?

10月20日&#xff0c;抖音双11好物节在抖音平台正式开启抢跑&#xff0c;据数据显示&#xff0c;截止10月31日平台多项双11销售增长记录再次被刷新。 *新抖双十一活动也已开启&#xff0c;最高可省30788元&#xff0c;活动详情&#x1f449; 抖音平台内大促氛围火爆&#xff0…

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

原文链接&#xff1a;麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟桌面操作系统软件仓库搭建的文章02-软件仓库添加新的软件包&#xff0c;本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版本上&…

14 _ 排序优化:如何实现一个通用的、高性能的排序函数?

几乎所有的编程语言都会提供排序函数,比如C语言中qsort(),C++ STL中的sort()、stable_sort(),还有Java语言中的Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排…

Python点云处理(十九)点云地面点提取——CSF布料模拟算法

目录 0 简述1 算法原理2 具体步骤3 实现0 简述 对于点云地面点滤波,众多传统算法滤波效果容易受到地形特征的影响(通常在复杂场景及陡峭地形区域滤波效果较差)且常常需要用户对数据有较为丰富的先验知识来进行设置滤波器中的各种参数。为了解决这些问题,张吴明教授等人提出…

二蛋赠书七期:《云原生数据中台:架构、方法论与实践》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

Docker-compose容器群集编排管理工具

目录 Docker-compose 1、Docker-compose 的三大概念 2、YAML文件格式及编写注意事项 1&#xff09;使用 YAML 时需要注意下面事项 2&#xff09;ymal文件格式 3&#xff09;json格式 3、Docker Compose配置常用字段 4、Docker-compose的四种重启策略 5、Docker Compose…

BetterDisplay Pro v1.4.15(显示器管理管理软件)

BetterDisplay Pro是一款屏幕显示优化工具&#xff0c;可用于Windows和Mac操作系统。它可以帮助用户调整屏幕的亮度、对比度、色彩等参数&#xff0c;以获得更好的视觉体验。此外&#xff0c;BetterDisplay Pro还提供了一些额外的功能&#xff0c;如屏幕分割、窗口管理、快捷键…

基于单片机的车载太阳能板自动跟踪系统研究

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、总体设计开发流程二、机械结构设计与研究3.1 机械系统总体设计3.1.1 太阳能板折叠传动 三、太阳能自动跟踪系统硬…

卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理,批量优化

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…

内存取证 worldskills3.vmem与gs02.jpg题目WP

worldskills3.vmem 题目信息 获取admin用户密码是多少&#xff1f; 获取ip和主机名是什么&#xff1f; 获取桌面上的flag.txt文件的内容是什么&#xff1f; 服务器存在一个挖矿病毒&#xff0c;矿池地址是&#xff1f; 恶意代码在系统中注册了服务&#xff0c;服务名是什么&a…

windows 11渗透测试工具箱

系统简介 本环境旨在提供一个开箱即用的windows渗透测试环境&#xff1b;建议运行环境&#xff1a;【vmware&#xff1a;17.0 】 /【运行内存&#xff1a;8G】 /【固态硬盘&#xff1a;100G】 Windows11 Penetration Suite Toolkit v2.2 (WSL) 【推荐】 下载链接&#xff1a;h…