当前位置: 首页 > article >正文

每天一道算法题【蓝桥杯】【使用最小花费爬楼梯】

题目

思路

动态规划

状态表示

dp[i] 表示从第i个台阶开始跳跳到台阶顶使用的最小花费

状态转移方程

前一个台阶的最小花费要看后两个台阶来决定
dp[i]为后两个台阶花费的最小值加上这个台阶的花费
dp[i] = min(dp[i + 1], dp[i + 2]) + cost[i]

初始化

dp[n - 1] = cost[n - 1];//第n-1个台阶跳到台阶顶的最小花费为cost[i-1]
dp[n - 2] = cost[n - 2];//第n-2个台阶跳到台阶顶的最小花费为cost[i-2]

注意返回值

return min(dp[0], dp[1]);//第一次跳可以选择跳到第一个台阶或第二个台阶
}

#define _CRT_SECURE_NO_WARNINGS 1
#include<bits.h>
#include<vector>
using namespace std;
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        vector<int>dp(n);
        dp[n - 1] = cost[n - 1];//第n-1个台阶跳到台阶顶的最小花费为cost[i-1]
        dp[n - 2] = cost[n - 2];//第n-2个台阶跳到台阶顶的最小花费为cost[i-2]
        for (int i = n - 3; i >= 0; i--)
        {
            dp[i] = min(dp[i + 1], dp[i + 2]) + cost[i];//前一个台阶的最小花费要看后两个台阶来决定
            //写出状态转移方程
        }


        return min(dp[0], dp[1]);//第一次跳可以选择跳到第一个台阶或第二个台阶
    }
};

http://www.kler.cn/a/580640.html

相关文章:

  • linux设置pem免密登录和密码登录
  • 【算法day3】寻找两个正序数组的中位数
  • 精选一百道备赛蓝桥杯——2.K倍区间
  • 解释 TypeScript 中的类型系统,如何定义和使用类型?
  • Go语言中位清除运算符的应用场景
  • Linux 内核自定义协议族开发:从 “No buffer space available“ 错误到解决方案
  • php虚拟站点提示No input file specified时的问题及权限处理方法
  • P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS
  • 【洛谷DFS算法】P1123取数游戏
  • 09 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(三)
  • React基础之项目创建
  • 在线json转ArkTs-Harmonyos
  • C 语言数据结构(二):顺序表和链表
  • 项目管理工具 Maven
  • docker学习使用教程
  • 航空发动机叶片检测-三维扫描技术重构精密制造质量体系
  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
  • 游戏行业研究系列报告
  • k8s面试题总结(十二)
  • 在mac中设置环境变量