代码随想录算法训练营第四十五天丨卡码网:57. 爬楼梯、322. 零钱兑换、279. 完全平方数

【WRF湿度调整策略】WRF/ERA5湿度数据对比 阅读详情

卡码网:57. 爬楼梯:

跟昨天第三题一样,求排列数,先2阶后1阶算是两种方法。

def Stairs(n, m):
    dp = [0] * (n + 1)
    dp[0] = 1
    for j in range(1, n + 1):
        for i in range(1, m + 1):
            if j - i >= 0:
                dp[j] += dp[j - i]
    return dp[n]
    
if __name__ == '__main__':
    n, m = map(int, input().strip().split())
    print(Stairs(n, m))

322. 零钱兑换:

求组和总和最小,内外循环顺序不影响结果。

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dp = [float('inf')] * (amount + 1)
        dp[0] = 0
        for coin in coins:
            for j in range(coin, amount + 1):
                dp[j] = min(dp[j], dp[j - coin] + 1)
        return dp[amount] if dp[amount] <= amount else -1

279. 完全平方数

第一感觉...三平方和定理...n年前搞竞赛时候杂志上读到的没ruan用的结论...

数论方法:

最坏情况O(n)时间复杂度,哦莫,优雅。

class Solution:
    def numSquares(self, n: int) -> int:
        def isPerfectSquare(x):
            return int(math.sqrt(x)) ** 2 == x

        def checkAnswer4(n):
            while n % 4 == 0:
                n //= 4
            return n % 8 == 7
        
        if isPerfectSquare(n):
            return 1
        if checkAnswer4(n):
            return 4
        for i in range(1, int(math.sqrt(n)) + 1):
            if isPerfectSquare(n - i*i):
                return 2
        return 3

动态规划:

动规也很简单,跟上一题不能说一模一样,至少完全相同。

class Solution:
    def numSquares(self, n: int) -> int:
        m = int(math.sqrt(n))
        dp = [float('inf')] * (n + 1)
        dp[0] = 0
        for i in range(1, m + 1):
            for j in range(i ** 2, n + 1):
                dp[j] = min(dp[j], dp[j - i ** 2] + 1)
        return dp[n]

今日总结:

简单简单简单!!

如果每遇到一道题都可以告诉我用什么算法解决那就好了!!!

保研考研机试攻略:python笔记(4) 保研考研机试攻略:python笔记(4)二分法+最大公约数+最小公倍数+素数判断+幂次方mod方法+匹配问题+哈希算法+哈夫曼编码+二叉树 阅读详情

相关推荐

云安全技术——搭建VPN

VPN(Virtual Private Network)是一种可以在公共网络上建立安全连接的技术。VPN是实现保密通信的基本手段,在windows系统上,可以直接进行VPN服务的搭建。1.VPN的工作原理:通过使用加密协议和认证机制,将本地计算机和远程服务器之间的通信加密和保护。2.VPN的分类:根据不同的方式和用途,VPN可以分为不同类型,例如远程访问VPN、站点到站点VPN等。3.VPN的优势:VPN可以带来许多好处,如提高数据安全性、隐藏真实IP地址、突破地理限制等。4.

qq_53142796的博客 3万+

代码随想录算法训练营第45天 | 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])既然递归公式是 dp[i] += dp[i - j],那么dp[0] 一定为1,dp[0]是递归中一切数值的基础所在,如果dp[0]是0的话,其他数值都是0了。本题呢,dp[i]有几种来源,dp[i - 1],dp[i - 2],dp[i - 3] 等等,即:dp[i - j]

Laulian的博客 2139

ss524v100 调试cvbs输出

启用视频层3 dev2 对应 layer3在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序。

2116

代码随想录算法训练营三刷 day45 | 动态规划 之 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

所以本题的两个for循环的关系是:外层for循环遍历物品,内层for遍历背包或者外层for遍历背包,内层for循环遍历物品都是可以的!都要选最小的,所以非0下标的dp[j]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖。所以本题外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!解题思路:完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品。表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。

baimaozi_007的博客 2207

Wireshark抓包实战:5个CTF比赛中高频出现的流量分析技巧(附真实案例)

本文分享了Wireshark在CTF比赛和实战渗透中的五个核心流量分析技巧。内容涵盖从宏观统计概览锁定可疑目标、深度解析ICMP与HTTP等协议、追踪重组完整会话流,到利用字符串搜索和命令行工具进行自动化分析。掌握这些高阶技巧能显著提升分析海量网络流量的效率与精准度。

rrr55的博客 261

SAP成本核算变式OKKN配置详解:从CK11N到CK24,手把手教你搞定标准成本发布

本文深入解析SAP成本核算变式OKKN的配置原理与实战应用,涵盖从CK11N到CK24的标准成本发布全流程。详细讲解数量结构控制、价值结构配置及间接费用计算规则,帮助成本会计精准掌握标准成本计算逻辑,解决BOM版本选择、工艺路线获取等常见问题,提升企业成本管理效率。

weixin_27219587的博客 289

代码随想录算法训练营第四十五天| 卡码网57.爬楼梯、LeetCode322.零钱兑换、LeetCode279.完全平方数

凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])因此在dp[j-coins[i]]执行+1操作前,也就是在递推公式前,需要判断dp[j-coins[i]]是否为最大值,如果为最大值,就没有考虑的必要!在当前轮遍历的时候发现增加了容量的背包可以再添加一个物品1,就会有【物品1,物品2,物品1】这样的情况,所以很可能会有物品1出现在物品2之类的情况。

m0_64514622的博客 2010

基于springboot生鲜食品订购系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。尽管O2O生鲜食品订购已经有了很大程度的发展,但在微信小程序的O2O生鲜食品订购领域上却少有建设。

1024

代码随想录算法训练营第45天| 卡码网 57. 爬楼梯、Leetcode 322. 零钱兑换、Leetcode 279.完全平方数

理解了完全背包问题之后,这三道题还是很简单的,唯一的难点在于将题目抽象成完全背包问题。最后,如果文章有错误,请在评论区或私信指出,让我们共同进步!

Camellia__Wang的博客 949

Flotherm XT新手必看:5分钟搞定自然对流热仿真(附案例文件)

本文为Flotherm XT新手提供了自然对流热仿真的快速入门指南,通过详细的步骤解析和实用技巧,帮助用户在5分钟内完成从建模到后处理的全流程。重点介绍了环境设置、几何建模、材料属性、网格划分等关键环节,并附有案例文件供参考学习,助力工程师快速掌握热仿真技术。

weixin_30839881的博客 621

银河麒麟V10SP1实战:5步搞定AD域登录(附Samba+Winbind配置详解)

本文提供银河麒麟V10 SP1操作系统无缝集成Windows AD域的实战指南。文章深入解析了Samba、Winbind与Kerberos三大核心组件的协作原理,并详细阐述了从环境准备、软件包安装、配置文件定制到执行加域及排错的全流程。特别针对2403等新版本提供了关键配置差异与避坑要点,旨在帮助企业运维人员实现高效、稳定的域环境登录与管理。

weixin_29269441的博客 293

代码随想录算法训练营第三十九天|70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数

确定递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j])确定dp数组(dp table)以及下标的含义:凑足总额为j所需钱币的最少个数为dp[j]确定dp数组(dp table)以及下标的含义:爬到有i个台阶的楼顶,有dp[i]种方法。确定遍历顺序:求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。dp数组如何初始化:dp[0] = 1,下标非0的dp[j]初始化为0。dp数组如何初始化:dp[0] = 0,下标非0的元素都是应该是最大值。

weixin_47748259的博客 1076

C++幂运算全解析:std::pow()函数详解与实战指南

本文详细介绍了C++标准库中的std::pow()函数,包括其基本用法、数学定义和多种重载形式。重点分析了该函数在科学计算、图形处理等领域的实际应用,并提供了性能优化方案如快速幂算法和预计算表。文章还探讨了精度控制、错误处理等关键问题,最后通过一个完整计算器实现展示了综合应用。std::pow()作为基础数学函数,合理使用能显著提升计算效率和代码可靠性。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 340

代码随想录算法训练营第四十八天| 70. 爬楼梯(进阶版)、322. 零钱兑换、 279.完全平方数

动态规划,递推公式重要,但是遍历顺序也很重要,甚至比递推公式更难,后面需要对比不同的总结消化一下

qq_52149213的博客 2164

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

代码随想录算法训练营Day32 | 完全背包问题(卡码网52. 携带研究材料)、Leetcode518. 零钱兑换 II、377. 组合总和 Ⅳ、卡码网70. 爬楼梯

在 01背包问题中,背包先空留出物品 1 的容量,此时容量为 1,只考虑放物品 0 的最大价值是 dp[0][1],因为 01 背包每个物品只有一个,既然空出物品 1,那背包中也不会再有物品 1。放物品 i:背包空出物品 i 的容量后,背包容量为 j - weight[i],dp[i][j - weight[i]] 为背包容量为 j - weight[i] 且不放物品 i 的最大价值,那么 dp[i][j - weight[i]] + value[i] ,就是背包放物品 i 得到的最大价值。

叽里呱啦大王的博客 1397

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

代码随想录算法训练营DAY45|C++动态规划Part7|70.爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

在本题中,我们求的是最少物品是多少,所以本题和组合排列没什么关系,不影响我们最终要求的最少的元素数量,故本题什么样的遍历顺序都可以。也就是说求的是装满这个背包所需要的最少物品的数量。就是我们的背包容量,然后物品的重量和价值就是各个完全平方数,题目中要求的是用完全平方数拼凑出。dp[0]表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。的背包,最少的物品。小的完全平方数组成的数字集合,作为我们的物品集合。中,我们求的是装满这个背包有多少种办法,,但是在本题中,我们的递推公式出现的是。

糖炒栗子 1372

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

代码随想录算法训练营第五十天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

题目要求的是凑成对应总金额最少的硬币个数,所以dp[i]就表示凑成容量i的最少的硬币个数,递推公式就是取可能凑出当前容量的硬币数量的最小值,要考虑的有两种情况,一种是原来就推出来的dp[j],另一种是遍历到了当前物品,那么把当前物品算进来,dp[j-i]个硬币加上当前这一个硬币凑出容量j,这两种情况取小值存起来。然后考虑一下初始化问题,因为是取最小值,所以都初始化为INT_MAX,但是又要考虑到第一个有效数值从哪里获取,那就是dp[0]=0,然后第一个硬币刚好凑出来时就加1存到dp[j]中。

Tong_1024_的博客 1002

代码随想录算法训练营第50天(动态规划07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

本题看起来是一道简单题目,稍稍进阶一下其实就是一个完全背包!如果我来面试的话,我就会先给候选人出一个 本题原题,看其表现,如果顺利写出来,进而在要求每次可以爬[1 - m]个台阶应该怎么写。顺便再考察一下两个for循环的嵌套顺序,为什么target放外面,nums放里面。这就能考察对背包问题本质的掌握程度,候选人是不是刷题背公式,一眼就看出来了。这么一连套下来,如果候选人都能答出来,相信任何一位面试官都是非常满意的。

weixin_46743838的博客 1404

代码随想录算法训练营第四十五天|70. 爬楼梯(进阶版)、322. 零钱兑换、279. 完全平方数。

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。本题其实是一个完全背包问题。1阶,2阶,… m阶就是物品,楼顶就是背包。每一阶可以重复使用,例如跳了1阶,还可以继续跳1阶。问跳到楼顶有几种方法其实就是问装满背包有几种方法因此可以按照完全背包的格式写,不过本题是排列问题因为先1后2和先2后1不一样,所以要先遍历背包再遍历物品。

eternaappiness的博客 967

代码随想录算法训练营第四十五天||70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])既然递归公式是 dp[i] += dp[i - j],那么dp[0] 一定为1,dp[0]是递归中一切数值的基础所在,如果dp[0]是0的话,其他数值都是0了。本题呢,dp[i]有几种来源,dp[i - 1],dp[i - 2],dp[i - 3] 等等,即:dp[i - j]所以遍历的内循环是正序。

weixin_48040500的博客 832

代码随想录算法训练营第三十二天 | 卡码52.携带研究材料、LeetCode518.零钱兑换II、LeetCode377.组合总和IV、卡码网57.爬楼梯(进阶)

探究为何滚动数组方式解决完全背包问题可以外遍历背包容量内遍历物品种类(未解之谜)

zhuabazhuabahuo的博客 660

代码随想录-算法训练营day45(动态规划07:爬楼梯进阶本,零钱兑换,完全平方数)

/不需要這個if statement,因爲在完全平方數這一題不會有"湊不成"的狀況發生( 一定可以用"1"來組成任何一個n),故comment掉這個if statement。//也就是如果dp[j-coins[i]]这种情况不存在,根本凑不出来,就不做运算。//因为公式里有dp[j - coins[i]] + 1,其实也是为了防止溢出。//求的是最小个数,跟是排列还是组合无关,所以遍历顺序可以颠倒。//可以多次使用,背包从前向后遍历,多次添加coins[i]// 遍历物品,物品从1到根号n。

weixin_61931006的博客 1232

代码随想录算法训练营第四十五天 | LeetCode 70. 爬楼梯、322. 零钱兑换、279. 完全平方数

i 要小于等于 n,如果比 n 都大了就没有意义了,然后 j 就是从 i。i] 推出,dp[j-i。

Hsusan的博客 323

【动态规划】代码随想录算法训练营第四十五天 |70. 爬楼梯 (进阶),322. 零钱兑换 ,279.完全平方数 (待补充)

完全平方数 是一个整数,其值等于另一个整数的平方;例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量。输出描述:输出一个整数,表示爬到楼顶的方法数。注意:给定 n 是一个正整数。

wufaqidong1的博客 1200

代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶),322. 零钱兑换 ,279.完全平方数

代码随想录题解:​​​​​​​。

qq_42973684的博客 897

代码随想录算法训练营第45天 | 70. 爬楼梯(进阶版),322. 零钱兑换,279.完全平方数

代码随想录算法训练营第45天 动态规划Part07

Aaron_Yang 997
上一篇: 代码随想录算法训练营第四十四天丨完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
下一篇: 代码随想录算法训练营第四十六天丨139. 单词拆分、多重背包
LIEBESFREUD
博客等级 码龄9年 372粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值