算法题每日一练---第38天:爬楼梯的最少成本

简介: 请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。

2.png

一、问题描述


数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。


每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。


请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。


题目链接:爬楼梯的最少成本


二、题目要求


样例 1:

输入: cost = [10, 15, 20]
输出: 15
解释: 最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。


样例 2:

输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出: 6
解释: 最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6 。


考察

动态规划中等题型
建议用时15~30min


三、问题分析

这也是一道比较典型的动态规划问题,动态规划没做过的可以看这一篇入门题解:


算法题每日一练---第34天: 青蛙跳台阶


还是用我们的三步走,老套路:


第一步 含义搞懂:


题目要求求出到达楼层顶部的最低花费,那我们动态规划的数组dp[i]就表示从下标0到达下标i的最小花费。


注意

这一题要求到达楼顶,所以虽然数组的下标到n-1,我们要求到n。


第二步 变量初始:


只需要初始化两个变量:

dp[0]=0;
dp[1]=0;


第三步 规律归纳:


假设i为2,那么dp[2]该如何利用前面两个dp关系呢?

0->2需要跳两步,花费dp[0]+cost[0]
1->2需要跳一步,花费dp[1]+cost[1]

dp[2]只能由上面的两个式子得到,我们选一个小的不就行了,那推广到dp[3]、dp[4]不也是一样。

所以dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

三步走,打完收工!


四、编码实现

classSolution {
public:
intminCostClimbingStairs(vector<int>&cost) {
inti,n=cost.size();//初始化intdp[n+2];
dp[0] =dp[1]=0;//变量初始for (i=2;i<=n;i++) 
    {
dp[i] =min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);//规律归纳    }
returndp[n];//输出结果    }
};


五、测试结果

1.png

相关文章
|
7月前
|
算法 测试技术 C++
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
|
2月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
114 0
|
机器学习/深度学习 传感器 安全
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
|
算法 测试技术 C#
C++前缀和算法:合并石头的最低成本原理、源码及测试用例(二)
C++前缀和算法:合并石头的最低成本原理、源码及测试用例
|
机器学习/深度学习 算法 测试技术
C++前缀和算法:合并石头的最低成本原理、源码及测试用例(一)
C++前缀和算法:合并石头的最低成本原理、源码及测试用例
|
机器学习/深度学习 传感器 算法
基于粒子群算法求解带时间窗的+带容量的车辆路径规划问题(惩罚成本)附Matlab代码
基于粒子群算法求解带时间窗的+带容量的车辆路径规划问题(惩罚成本)附Matlab代码
|
机器学习/深度学习 传感器 算法
【选址优化】基于NSGA2算法实现多级中心物资配送路径选址满意度-建设成本多目标优化附matlab代码
【选址优化】基于NSGA2算法实现多级中心物资配送路径选址满意度-建设成本多目标优化附matlab代码
|
机器学习/深度学习 传感器 算法
【优化布局】基于遗传算法求解作业车间布局最小成本设计优化问题附matlab代码
【优化布局】基于遗传算法求解作业车间布局最小成本设计优化问题附matlab代码
|
算法
算法简单题,吾辈重拳出击 - 爬楼梯的最少成本
爬楼梯都还记得吧?f(x)=f(x-1)+f(x-2),斐波那契数列。 本题是爬楼梯的变形题:爬楼梯的最少成本
下一篇
DataWorks