动态规划:爬楼梯问题

动态规划解爬楼梯问题:从递归到斐波那契 动态规划是解决最优化问题的经典算法范式,其核心思想是将复杂问题分解为重叠子问题。以爬楼梯问题为例,每次可跨1或2个台阶,求到达第n阶的方法数。这个问题实质上是斐波那契数列的变体,展现了递归与动态规划的内在联系。通过记忆化技术优化递归解法,可将时间复杂度从O(2^n)降至O(n)。进一步采用自底向上的动态规划方法,不仅能提升性能,还能通过状态压缩优化空间复杂度。这类问题在技术面试中极为常见,既能考察算法基础,又能延伸讨论时间/空间复杂度优化策略。掌握动态规划解题模式,对解决背包问题、路径规划等实际工程问题具有 阅读详情

题目

给定一个数组cost,长度为n。cost[i]表示跳在第i阶台阶上所需费用,初始步数为0,每次最多跳两个台阶。一开始未在任何一阶台阶,求跳到第n接最低花费多少。

cost = [10,15,20,6,7,6,6,8,7,6,5]

请添加图片描述

解题思路:

化大问题为小问题,通过小问题的最优解推出下一个问题的解,逐步找到最终解

定义最佳状态数组: dp = [0],dp[i]表示爬山第i阶所需的最少费用

台阶的编号n, n从1开始

步骤:

如果跳上第1阶:

跳到第1阶只有1种方式,所需费用为cost[0]

跳一阶:费用为10, 因此 dp[1]= cost[0] = 10

如果跳上第2阶:

跳到第2阶只有2种方式。第二阶所需费用为cost[1]

跳两次一个台阶,费用为:cost[0]+cost[1]=25

跳一次两个台阶:费用为:cost[1] = 15

最终,到第2阶,最少费用为 dp[2] = min(25,15),就是15

如果跳上第3阶,第三阶所需费用为cost[2]

那么,有两种情况:

  1. 从第(3-2)1阶跳上来的,前面已经算出跳到第1阶的最低费用,因此从第1阶跳到第3阶,费用为 pd[3-2] + cost[2] = 10+20=30

  2. 从第(3-1)2阶跳上来的,前面已经算出跳到第2阶的最低费用,因此从第2阶跳到第3阶,费用为 pd[3-1] + cost[2] = 15+20 = 35

最终,到第n阶,最少费用为 dp[2] = min(30,35),30

如果跳上第n阶:

同样是有两种情况:因为每次最多跳两阶。(1) 从n-1阶跳上来,(2)或者从n-2阶跳上来

从n-1阶跳上来,最低费用为: dp[n-1]+cost[n]

从n-2阶跳上来,最低费用为: dp[n-2]+cost[n]

最终,跳到第n阶,最低费用为:dp[n] = min( dp[n-1]+cost[n], dp[n-2]+cost[n])

答案代码编写

function minCost(){
    let cost = [1,-2,3,4,5]
    let dp = [cost[0]]
    // 踩上就扣费 
    for(let i=1;i<cost.length;i++){
        if(i==1){
            // 两阶,只需对比第二阶 和 前一节最少费用+第二阶费用
            dp[i] = min(cost[i], dp[i-1]+cost[i])
        }else{
            dp[i] = min(dp[i-1]+cost[i],dp[i-2]+cost[i])
        }
    }
    return "最少费用为:"+dp[cost.length-1]+"\n"
}
/*
结果:	最少费用为:6    (-2、3、5)
*/
function min(a,b){
		return a > b ? b : a
}
动态规划入门:LeetCode爬楼梯问题解法全解析 动态规划是解决最优化问题的经典算法范式,其核心思想是通过存储子问题的解来避免重复计算。以斐波那契数列和爬楼梯问题为代表的线性DP问题,展现了从递归到记忆化搜索,再到自底向上动态规划的完整优化路径。在实际工程中,动态规划广泛应用于路径规划、资源分配等场景。本文以LeetCode 70题为例,详细剖析了爬楼梯问题的6种解法演进,包括时间复杂度从O(2^n)到O(log n)的优化过程,特别适合算法初学者理解动态规划的基本原理和优化技巧。通过比较递归、记忆化、基础DP和空间优化DP等实现方式,读者可以掌握如何将数 阅读详情

相关推荐

从斐波那契到动态规划:爬楼梯问题的数学本质与算法演化

本文深入探讨了爬楼梯问题的数学本质与算法演化,从斐波那契数列到动态规划,揭示了其背后的数学原理与优化策略。通过对比递归、记忆化递归、动态规划及矩阵快速幂等多种解法,帮助读者理解算法效率的提升路径,适用于算法学习与优化实践。

weixin_29228203的博客 572

动态规划1(一维 — 跳台阶&&最长上升子序列)

Dynamic Programming的基本思想 将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解 有些子问题被重复计算了很多次。我们可以用一个表来记录所有已解的子问题的答案(打表),在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间,这就是动态规划法的基本思路 适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的,如下例dp[i ]依赖于dp[i - 1]和dp[i - 2] 例题原题链接 一个楼梯共有n级台阶,每次可以走一级或者两级,问从第

smallrain6的博客 687

如何从RHEL 8升级到RHEL 9

Red Hat 于 2022 年 5 月 17 日宣布全面推出 RHEL 9。这是 RHEL(Red Hat Enterprise Linux)的最新版本,它具有许多功能和增强功能。

u012748257的博客 1019

【剑指 Offer II】 088. 爬楼梯的最少成本

题目: 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。 每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。 请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。 示例 1: 输入:cost = [10, 15, 20] 输出:15 解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。 示例 2: 输入:cost = [1,

漆黑梦工厂 453

ubuntu通过qemu安装银河麒麟V10_Arm_v8 (kylin_v10_飞腾/鲲鹏版)

一、windows下安装vmware虚拟机 二、ubuntu下载地址 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.3-live-server-amd64.iso 三、vmware中新建虚拟机,并使用ubuntu-20.04.3-live-server-amd64.iso作为启用盘 。。。在虚拟机中安装ubuntu(略) 四、配置ssh(如果ssh登录不上时配置) 修改openssh的配置 vi /etc/s

u010533742的博客 8703

局放起始电压(PDIV)与击穿电压(BDV):绝缘系统设计的核心参数 [特殊字符]

在电力设备绝缘系统设计中,**局放起始电压(Partial Discharge Inception Voltage, PDIV)和击穿电压(Breakdown Voltage, BDV)**是两个至关重要的参数。它们直接反映了绝缘材料的性能和绝缘系统的可靠性,对变压器的设计、制造和运行具有重要指导意义。本文将深入探讨这两项参数的定义、测试方法及其与绝缘设计制造的关系,帮助读者全面理解其在电力设备中的核心作用。

mubiao05的博客 2629

动态规划-008-跳台阶

文章目录跳台阶问题题目描述分析代码变态跳青蛙题目描述分析代码 跳台阶问题 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 分析 完全同 Fibonacci 数列。 确定状态转移公式: 阶段定义:跳n阶台阶需要总可能跳法为 f(n)。 那调到第n阶台阶的最后一步跳法无非是从第n-1阶台阶跳一步上去的,或者从第n-2阶台...

记录求学阶段的技术学习、项目实践与成长思考。 569

实测|龙虾机器人(OpenClaw)Windows系统部署全攻略(含避坑指南)

先简单科普下:龙虾机器人本质是一款开源AI代理框架,核心优势是“能行动、可本地、高灵活”——它不内置大模型,需要对接第三方AI接口(如GPT、Claude、阿里云百炼等),但能将AI的指令转化为实际的系统操作,相当于给AI配了一个“能动手的身体”,这也是它和普通对话大模型的核心区别。今天就结合自己的实测经历,从环境准备、分步部署、初始化配置,到常见问题排查,写一篇保姆级攻略,不管是新手还是有一定技术基础的同学,都能跟着一步步完成部署,少走弯路~解决方案:检查聊天软件插件是否安装成功,权限是否配置完整;

wohaiweifaju的博客 1万+

动态规划算法经典问题:爬楼梯

我们用动态规划方法解决日常生活中经常遇到的一个问题—爬楼梯问题。 一、问题描述 小明家住在二楼,每次回家都需要经过一个10层台阶的楼梯,小明每次可以选择一步走一级台阶或者一步走两级台阶。请帮小明计算他从楼下到家一共有多少种走法? 打个比方,小明可以选择每次都走一级台阶,那么他回家一共需要走十步,这是其中的一种种走法,不然,他还可以选择一次走两级台阶,那么他回家一共需要走五步,这是另外一种走法,除此之外,还有很多种不同的走法,现在我们要做的是把所有可能的走法数量统计出来。 在正式写程序之前,我们先一起整理一下

qq_53963637的博客 8128

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

linux v3h平台开发系列详解(GMSL摄像头篇):1.11 解串器MIPI 1.5G高速率特殊deskew配置

解串器max96712 deskew配置

xian18809311584的博客 1774

算法学习:动态规划之爬楼梯问题

算法学习笔记

m0_64953392的博客 1831

Java炫酷烟花③(完整代码)

Java语言实现炫酷烟花动画的完整代码。 下载代码 下载链接:我是一只有趣的兔子,感谢你的喜欢。

AIGC 784

动态规划入门:从斐波那契到爬楼梯问题解析

动态规划(DP)是算法设计中解决最优化问题的核心技术,其核心思想是将复杂问题分解为重叠子问题,通过记忆化存储避免重复计算。从经典的斐波那契数列问题入手,可以清晰理解DP的状态转移方程和空间优化策略。斐波那契问题展示了如何通过递归树识别重叠子问题,进而采用记忆化搜索或迭代法将时间复杂度从O(2^n)优化到O(n)。类似思想可应用于爬楼梯问题及其变种,只需调整状态定义即可处理不同约束条件。这些基础DP问题揭示了算法设计中的关键范式:定义状态、建立转移方程、处理边界条件。掌握这些思想后,可进一步挑战背包问题、股票

weixin_33483304的博客 335

基于应用谱减法进行语音去噪的算法

在上述代码中首先通过读取语音信号和噪声信号,将两个信号都转换为频域信号,然后计算出语音信号在各频率下的功率谱和噪声信号在各频率下的功率谱,并基于此计算信噪比,接着根据信噪比计算出阈值,并将低于阈值的能量对应的频段进行清零操作,最终实现去噪处理,最后将处理后的信号转换回时域信号。该算法采用谱减法进行降噪处理,能有效地去除语音信号中的噪声,但是在实际应用中,该方法也存在一些问题,如会对语音信号的高频部分产生影响,所以需要在应用过程中进行适当的调整。

weixin_50547796的博客 192

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

动态规划入门:爬楼梯问题解法与优化

动态规划是解决复杂问题的有效算法范式,其核心思想是通过存储子问题的解来避免重复计算。从递归到动态规划的演进,体现了算法优化的重要思路。以经典的爬楼梯问题为例,每次可选择爬1或2个台阶,求到达第n阶的方法数。这个问题不仅与斐波那契数列密切相关,还能通过空间优化将复杂度降至O(1)。在实际工程中,动态规划广泛应用于路径规划、投资决策等场景。本文详细解析了从基础递归到矩阵快速幂的多种解法,并比较了它们的性能差异,为算法学习提供了清晰的优化路径。

weixin_32306957的博客 303

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

动态规划解决爬楼梯问题:从斐波那契到优化策略

动态规划是解决最优化问题的经典算法思想,其核心在于将复杂问题分解为相互重叠的子问题,并通过存储中间结果避免重复计算。斐波那契数列作为动态规划的典型案例,展现了递推关系与记忆化技术的完美结合。在实际工程中,这种思想广泛应用于路径规划、资源分配等场景。爬楼梯问题作为斐波那契数列的变体,不仅可以通过递归、记忆化递归解决,还能进一步优化为空间复杂度O(1)的动态规划实现。针对不同规模的问题,矩阵快速幂和通项公式等数学方法提供了更高效的解决方案。理解这些算法的性能差异和适用场景,对于提升编程能力和算法思维至关重要。

weixin_32244597的博客 238

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

动态规划(一):爬楼梯问题

动态规划 动态规划是一种用来解决一类问题的算法,用这类算法解决的问题需要具有以下特点:具有 最优子结构、子问题重叠、无后效性 如果子问题不重叠,可以用分治算法 在一定程度上,动态规划和递归两种方法可以相互转换,就是 有些问题用动态规划能解决的也可以用递归解决 举例子:爬楼梯问题 问题描述:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级楼梯或者二级楼梯,要走上第M级楼梯,共有多少种走法? ...

weixin_43850639的博客 1408

「动态规划」2/n:通过具体问题练习动态规划(爬楼梯问题、小偷问题)

在上一篇文章中提到的最经典的斐波那契数列就是一种一维的动态规划。一维其实也很容易看出来,只有一个属性(面上来说就是数字)相关。除了斐波那契数列之外,还有一些很常见或经典的一维动态规划问题,本文将通过其中的一些问题进一步介绍动态规划。 爬楼梯问题 问题描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。

ZhongUncle的博客 1092

动态规划问题:爬楼梯

​以力扣上一个题为例,了解什么是动态规划问题。

我好菜啊 393

动态规划解爬楼梯问题:从递归到矩阵快速幂

动态规划是解决最优化问题的经典算法思想,其核心在于将复杂问题分解为重叠子问题,并通过存储中间结果避免重复计算。以爬楼梯问题为例,每次可跨1或2个台阶,求到达第n阶的方法数。这个问题不仅展示了从O(2^n)递归解法到O(n)动态规划的优化过程,还涉及斐波那契数列、矩阵快速幂等数学概念。在实际工程中,这种思想广泛应用于路径规划、金融建模等领域。通过记忆化搜索和状态压缩等技术,可以显著提升算法效率,面试中常作为考察动态规划基础的经典案例。

weixin_27102543的博客 218

动态规划入门:从斐波那契到爬楼梯问题

动态规划是解决最优化问题的经典算法范式,其核心思想是通过将复杂问题分解为相互关联的子问题,并存储中间结果来避免重复计算。这种记忆化技术能显著提升算法效率,如将斐波那契数列计算从O(2^n)优化到O(n)。典型的动态规划问题具有重叠子问题和最优子结构两大特征,适用于路径规划、资源分配等多种场景。本文以LeetCode经典题目为例,详解动态规划五步法:定义状态、建立转移方程、初始化、确定遍历顺序和验证推导。通过斐波那契数、爬楼梯及其变种问题,展示如何应用状态压缩等优化技巧,帮助开发者掌握这一面试常考、工程实用的

weixin_34239592的博客 440
上一篇: echarts:饼、柱状、折线图的配置说明
下一篇: 动态规划:最大子数组和
jayLog
博客等级 码龄7年 318粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jayLog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值