[蓝桥杯算法从小白到大牛]动态规划第三讲:使用最小花费爬楼梯

目录

1->题目链接

2->题目解析

3->讲解算法原理

核心流程:

3.1->状态表示

3.2->状态转移方程(最重要的一步)

3.3->初始化

3.4->填表顺序

3.5->返回值

4->编写代码实现

5->您的专属鼓励师


1->题目链接

使用最小花费爬楼梯

2->题目解析

        直接看图理解

        切记:需要注意的是楼顶位置不在数组最后一个元素,而是在数组最后一个元素的下一个位置


        

注意注意:

        在这道题中,数组内的每⼀个下标 [0, n - 1] 表⽰的都是楼层,⽽顶楼的位置其实是在 n 的位置!!!

3->讲解算法原理

核心流程:

        创建一个dp表,按照题目要求去填表,最后根据题目要求返回经过处理的值

3.1->状态表示

        状态表示的含义(你就直接背下来):dp[i]也就是dp表里边的值表示什么意思,状态表示就是什么

        这道题目里dp[i]的值就表示到达第i个台阶最小花费

3.2->状态转移方程(最重要的一步)

        状态转移方程的含义(直接背下来):就是dp[i] = 什么,用式子表示出来

根据最近的⼀步,分情况讨论:


(1)先到达  i - 1  的位置,然后⽀付  cost[i - 1] ,接下来⾛⼀步⾛到  i  位置:dp[i - 1] + csot[i - 1] 
(2)先到达  i - 2  的位置,然后⽀付  cost[i - 2] ,接下来⾛⼀步⾛到  i  位置:dp[i - 2] + csot[i - 2] 

然后这是两种情况,我们要求最小花费,要在两者中找最小的

得到状态转移方程 dp[i] = min(cost[i - 1] + dp[i - 1], cost[i - 2] + dp[i - 2]);

3.3->初始化

         从我们的递推公式可以看出,我们需要先初始化  i = 0 ,以及  i = 1  位置的值。容易得到  dp[0] = dp[1] = 0 ,因为不需要任何花费,就可以直接站在第  0  层和第  1  层上

3.4->填表顺序

        根据「状态转移⽅程」可得,遍历的顺序是「从左往右」

3.5->返回值

        根据「状态表⽰以及题⽬要求」,需要返回 dp[n] 位置的值。
 

4->编写代码实现

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        //创建dp表
        //初始化
        //填表
        //返回

        int n = cost.size();
        vector<int> dp(n + 1, 0);
        dp[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];
    }
};

 看下成果,欧耶!打败100%!!!

5->您的专属鼓励师

        有些事情,你永远都没有办法做到“顶尖”,因为智力跟不上.但是所有的事情,你都可以做到“高段”,因为它需要的是时间的累积和精力的打磨.不聪明与聪明之间的区别,是很微妙的.有时候我们只会通过一次两次的结果,来判断整个人、整件事,其实这是不明智的.从小,邻居和亲戚在谈论我的时候,都会觉得我很聪明。但是只有我自己知道,我从来没有聪明过,只是看上去比较聪明而已.

        修行之路确实枯燥,但是我们把问题搞懂以后就发现他是那样的美妙!一遍学不会没关系吖,多看几遍,我也是学了好多遍呢,小伙伴们肯定学的又快又好!!!最后希望写的内容对小伙伴们有所帮助,我写的如果有哪里不对的地方请在评论区或者私信指出来哦!让我们一起进步吖,任何疑问包括心情不好都可以找我聊聊,我很乐意当你的倾听者吖.   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我叫珂蛋儿吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值