首页 > 其他分享 >动态规划-746. 使用最小花费爬楼梯

动态规划-746. 使用最小花费爬楼梯

时间:2022-10-29 11:34:19浏览次数:60  
标签:下标 arr 台阶 746 花费 上爬 cost let 爬楼梯

题目描述

给你一个整数数组 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 。

思路分析

通过对题目进行分析我们可以发现,当前的消费都由它下面的消费所决定,我们可以把这个理解为状态
比如第n层的消费,可能会由它之前的两个决定,可能是倒数前一个,或是倒数第二个所决定。
所以就可以推导出dp[i] = Math.min(dp[i-1] + dp[i-2]) + cost[i]

代码示例

/**
 * @param {number[]} cost
 * @return {number}
 */

// 方法一:
// var minCostClimbingStairs = function(cost) {  
//     let len = cost.length;
//     let arr = [];
//     arr[0] = cost[0];
//     arr[1] = cost[1];
//     for(let i = 2; i < len; i++) {
//         arr[i] = Math.min(arr[i-1] , arr[i-2]) + cost[i]
//     }
//     return Math.min(arr[len-1], arr[len-2]);
// };

// 方法二:
var minCostClimbingStairs = function(cost) {
    let len = cost.length
   let dp1 =cost[0],
    dp2 =cost[1]
    for(let i = 2;i<cost.length;i++) {
        let dpTmp= Math.min(dp1,dp2) + cost[i]
        dp1  = dp2
        dp2 = dpTmp
    }
    return Math.min(dp1,dp2)
};

标签:下标,arr,台阶,746,花费,上爬,cost,let,爬楼梯
From: https://www.cnblogs.com/zx529/p/16838379.html

相关文章

  • 动态规划 -70. 爬楼梯
    题目描述假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?思路碰到这类题我们可以通过高中学的数学归纳......
  • 爬楼梯
    问题描述假设你正在爬楼梯。需要n步你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例1:输入:2输出:2......
  • DP--爬楼梯1
    题目描述前几个月放映的头号玩家简直火得不能再火了,作为一个探索终极AI的研究人员,月神自然去看了此神剧。由于太过兴奋,晚上月神做了一个奇怪的梦,月神梦见自己掉入了一个被施......
  • 746 使用最小花费爬楼梯
    题目746使用最小花费爬楼梯给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以......
  • #yyds干货盘点# 动态规划专题:最小花费爬楼梯
    1.简述:描述给定一个整数数组  ,其中  是从楼梯第个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下......
  • CF1746D(记忆化搜索,DP,贪心)
    CF1746D(记忆化搜索,DP,贪心)https://codeforces.com/contest/1746/problem/d题意给一棵树,树上每个点有一个权值\(s_i\),有一个整数\(k\)。表示从根节点出发的简单路径的......
  • CF1746C(构造)
    CF1746C(构造)https://codeforces.com/contest/1746/problem/c题意给一个排列,进行\(n\)次操作,第\(i\)次操作可以将任意指定长度的后缀加\(i\)。问经过\(n\)次操......
  • [题解] Codeforces Global Round 23 1746 A B C D E1 F 题解
    点我看题求点赞A.Maxmina首先序列全0的情况肯定是NO。否则,如果\(k\ge3\),则在序列中随便找一个1,把他左边和右边分别用第一种操作不断缩,直到序列长度为k为止,最后用一次2......
  • 爬楼梯
    假设你正在爬楼梯。需要n 阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶......
  • 天秀!花费 200W 设计的新版 “小米”图标,看看用Python怎么绘制?
    最终呈现效果哈哈,咋们在讲述之前,首先看看最终呈现的效果吧,整体来说还是很不错的。小米“新”图标背后的数学前段时间,小米公司发布了一条微博,引发了热议,原来小米换了新logo......