河北建设网站企业锁在哪下载,网站备案过期,高端网站定制开发深圳,wordpress实现上传下载题目 给你一个整数数组 cost #xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例 1#…题目 给你一个整数数组 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 。
解题思路 使用动态规划首先定义dp[i]为到达第i个台阶的最小花费由题意可知dp[i]min(dp[i-1]cost[i-1], dp[i-2]cost[i-2]), 该递推公式可有dp[0]和dp[1]递推而来因此初始化dp[0]和dp[1]。据题意可知不需要花费就能达到第0和第1个台阶因此dp[0]0和dp[1]0. 最后返回dp[n]。
代码实现
class Solution {
public:int minCostClimbingStairs(vectorint cost) {int n cost.size();vectorint dp(n 1, 0); // dp[i] represents the minimum cost to reach step idp[0] dp[1] 0;for (int i 2; i n; i) {dp[i] min(dp[i-1] cost[i-1], dp[i-2] cost[i-2]);}return dp[n];}
};