动态规划|【斐波那契数列模型 】|746.使用最小花费爬楼梯

简介: 动态规划|【斐波那契数列模型 】|746.使用最小花费爬楼梯



题目

746. 使用最小花费爬楼梯

提示

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

示例 1:

输入:cost = [10,15,20]

输出:15

解释:你将从下标为 1 的台阶开始。

- 支付 15 ,向上爬两个台阶,到达楼梯顶部。

总花费为 15 。


示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]

输出:6

解释:你将从下标为 0 的台阶开始。

- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。

- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。

- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。

- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。

- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。

- 支付 1 ,向上爬一个台阶,到达楼梯顶部。

总花费为 6 。



提示:

  • 2 <= cost.length <= 1000
  • 0 <= cost[i] <= 999

思路

题目分析        

       此题他说给一个数组,这个数组里面的值是代表每级台阶向上爬的费用,每次在相应台阶支付费用,可以选择爬一层台阶或者两层台阶,题目要求计算到达楼梯顶部所花的费用,既然要计算到达楼梯顶部所花费的费用,首先我们得知道楼梯顶部在哪?根据给定cost数组:题目中说cost[i]代表第i级台阶向上爬所需要的费用,因为楼梯顶部是不需要往上爬的,所以也没有支付费用 ,,根据所给的示例,对于示例1,cost有三位数,从第四项开始就没有支付费用,所以第四项也就是下标为三数,是楼梯顶部,类比示例2,cost有九级台阶,所以第十项就是楼梯顶部

       另外,题目中说我们可以选择从0级台阶爬,也可以从1级台阶开始爬,这个也是根据最省钱的方案选择(如果从0级台阶爬,最省钱就选从0级台阶开始,如果从1级台阶爬最省钱就从1级台阶开始爬).

动态规划原理

解法一:

1.状态表示biao

       dp表里面的值表示的含义就是一个状态表示。

       本题就是,dp[i]表示,到达第i个台阶的最小花费

2.状态转移方程

        状态转移方程就是:dp[i]等于什么?一般情况下就是使用dp[i]前的状态或者(dp[i-1],dp[i-2]...)dp[i]后面的状态(dp[i+1],dp[i+2]...)推导出转移状态方程.那么怎么到达dp[i]呢,根据题目描述,支付后选择向上爬一个台阶,或者爬两个台阶,

a) 爬一个台阶,先到达i-1位置,支付cost[i-1],向上爬一个台阶

b) 爬两个台阶,先到达i-2位置,支付cost[i-2],向上爬两个台阶

cost[i-1]和cost[i-2]是一个定值,因此,到达i要花费最小,就是要到达i-1最小,到达i-2最小

根据上面状态表示的定义“dp[i]表示,到达第i个台阶的最小花费”所以到达i-1最小花费dp[i-1],到达dp[i-2]最小花费就是dp[i-2],

根据以上分析,状态转移方程

dp[i]=dp[i-1]+cost[i-1]

dp[i]=dp[i-2]+cost[i-2]

最后将两种情况对比,之后取最小值。

3.初始化

        初始化就是:保证填表的时候不越界,对该初始化的值要进行初始化

        因为可以直接从第0级台阶和第1台阶开始不需要花钱,所以dp[0]=dp[1]=0

4.填表顺序

       确定填表顺序是为了填写当前状态时,所需要的状态已经计算过了

       因为算dp[i]时,所以只能先算前面(dp[i-1],dp[i-2])的,填表顺序就是从左往右

5.返回值

       根据题目要求(到达i时所需要的最小花费)和状态表示返回我们要的答案

       本题就是dp[n]

解法二:

1.状态表示

还是创建一个dp表

于解法一不同的是,这次的dp[i]表示,i位置到达楼顶的最小花费

2.状态转移方程

分析到达楼顶的最小花费的形成过程,因为dp[i]表示i位置到达楼顶的最小花费,说明此时已经 到达了第i级台阶,支付cost[i]后

a)走一步到达第i+1级台阶,再从i+1的位置走到顶部,

b)走两步到达第i+2级台阶,再从i+2的位置走到顶部

要到达顶部的花费最小,就需要让i+1到顶部最小,根据状态表示,就可以把i+1到顶部最小表示为dp[i+1],同理i+2到顶部最小表示为dp[i+2]

所以状态转移方程可以表示为

dp[i]=cost[i]+dp[i+1]

dp[i]=cost[i]+dp[i+2]

然后就是两种情况比较,取最小值

3.初始化

       因为要用到后两个位置,所以要初始化倒数第一个台阶到顶部的最小花费,和倒数第二个台阶到顶部的最小花费,dp[n-1]=cost[n-1],dp[n-2]=cost[n-2]

4.填表顺序

       观察状态转移方程看出,由后面的值得出前面的值,所以填表顺序就是 从后往前

5.返回值

       我们的状态表示,dp[i]表示第i台阶到顶部的最小花费,根据题目要求的是-到达i时所需要的最小花费,也就是开始到顶部的最小花费,开始我们可以从 0开始,也可以从1开始,所以返回dp[0]和dp[1]两者的较小值。

代码

还是原来的四步

1.创建dp表

2.初始化

3.填表顺序

4.返回答案

解法一:

int minCostClimbingStairs(int* cost, int costSize) {
    //创建dp表
    int dp[10000]={0};
    //初始化
    dp[0]=dp[1];
    //填表
    for(int i=2;i<=costSize;i++)
    {
        dp[i]=(dp[i-1]+cost[i-1]<dp[i-2]+cost[i-2])?dp[i-1]+cost[i-1]:dp[i-2]+cost[i-2];
    }
    //返回
    return dp[costSize];
}

空间复杂度:O(n)

时间复杂度:O(n)

解法二:

int minCostClimbingStairs(int* cost, int costSize) {
    //创建dp表
    int dp[10000]={0};
    //初始化
    dp[costSize-1]=cost[costSize-1];
    dp[costSize-2]=cost[costSize-2];
    //填表
    for(int i=costSize-3;i>=0;i--)
    {
        dp[i]=(dp[i+1]+cost[i]<dp[i+2]+cost[i])?dp[i+1]+cost[i]:dp[i+2]+cost[i];
    }
    //返回
    return (dp[0]>dp[1])?dp[1]:dp[0];
}

空间复杂度:O(n)

时间复杂度:O(n)

相关文章
|
Ubuntu Linux Python
Linux(15)Ubuntu安装ninja构建工具
Linux(15)Ubuntu安装ninja构建工具
4947 0
|
机器学习/深度学习 人工智能 自然语言处理
AI产品经理的技术必修课:从工具应用到系统设计
AI产品经理的技术必修课:从工具应用到系统设计
1103 84
|
11月前
|
人工智能 API 开发者
企业级大模型市场,阿里通义份额第一
国际市场调研机构沙利文(Frost&Sullivan)发布了最新的《中国GenAI市场洞察:企业级⼤模型调⽤全景研究,2025》报告——2025年上半年,中国企业级市场大模型的日均总消耗量为10.2万亿Tokens,其中,阿里通义占比17.7%位列第一,成为目前中国企业选择最多的大模型。
|
11月前
|
数据采集 人工智能 监控
2025年中国能源管理平台十大厂家综合实力解析与选型指南
在“双碳”背景下,能源管理成企业战略核心。本文基于技术、方案、案例与生态四大维度,权威评选出2025年十大能源管理平台厂商,涵盖树根科技、华为云、阿里云等领军者,深度剖析其优势与适用场景,助力企业实现能效提升、降本增效与可持续发展,为绿色转型提供有力支撑。
1763 0
|
监控 安全 生物认证
网络安全中的身份认证与访问控制技术详解
【6月更文挑战第30天】网络安全聚焦身份认证与访问控制,确保合法用户身份并限制资源访问。身份认证涉及生物和非生物特征,如密码、指纹。访问控制通过DAC、MAC、RBAC策略管理权限。最佳实践包括多因素认证、定期更新凭证、最小权限、职责分离和审计监控。这些措施旨在增强系统安全,防范未授权访问。
2726 2
|
算法 物联网 Swift
Qwen3 X ModelScope工具链: 飞速训练 + 全面评测
Qwen于近日发布了Qwen3系列模型,包含了各个不同规格的Dense模型和MoE模型。开源版本中,Dense模型基本沿用了之前的模型结构,差别之处在于对于Q和K两个tensor增加了RMSNorm;MoE模型去掉了公共Expert,其他结构基本与前一致。在模型大小上,涵盖了从0.6B到32B(Dense)和235B(MoE)不同的尺寸。
2182 15
|
安全 关系型数据库 数据库
FastAPI数据库操作秘籍:如何通过高效且安全的数据库访问策略,使你的Web应用飞速运转并保持数据完整性?
【8月更文挑战第31天】在构建现代Web应用时,数据库操作至关重要。FastAPI不仅简化了API创建,还提供了高效数据库交互的方法。本文探讨如何在FastAPI中实现快速、安全的数据处理。FastAPI支持多种数据库,如SQLite、PostgreSQL和MySQL;选择合适的数据库可显著提升性能。通过安装相应驱动并配置连接参数,结合ORM库(如Tortoise-ORM或SQLAlchemy),可以简化数据库操作。使用索引、批量操作及异步处理等最佳实践可进一步提高效率。同时,确保使用参数化查询防止SQL注入,并从环境变量中读取敏感信息以增强安全性。
1322 1
|
人工智能
《AI助力生物学:基因编辑与蛋白质结构解析的加速引擎》
在生物学研究中,AI正发挥重要作用,特别是在基因编辑和蛋白质结构解析方面。AI通过设计新型基因编辑工具(如OpenCRISPR™)、提高编辑效率与精准度(如EVOLVEpro),以及优化整个编辑过程,显著加速了基因编辑的研究进展。在蛋白质结构解析领域,AI技术如AlphaFold实现了精准预测蛋白质三维结构,加速了蛋白质设计与改造,并解析蛋白质相互作用网络。这不仅推动了医学和农业领域的发展,也带来了伦理和法律等挑战,需要确保其健康、可持续发展。
746 11
|
Java
记一个 Base64 有关的 Bug
了解一下,下一次用 Java 开发 Base64 有关的逻辑的时候注意绕过。
530 2
|
SQL 安全 网络安全
网络安全攻防实战:黑客与白帽子的较量
【6月更文挑战第29天】网络安全战场,黑客与白帽子的博弈日益激烈。黑客利用漏洞扫描、DDoS、SQL注入等手段发起攻击,而白帽子则通过防火墙、入侵检测、数据加密等技术防守。双方在技术与智慧的较量中,未来将更多融入AI、区块链等先进技术,提升攻防效率与安全性。面对网络威胁,提升技能与意识至关重要。

热门文章

最新文章