LeetCode 第38天 | 初识动态规划 509.斐波那契数列 70.爬楼梯 746.使用最小花费爬楼梯

509. 斐波那契数
递推关系已经给出来了,即f(n) = f(n-1) + f(n-2);初始化dp也已经给出,即dp0 = 0,dp1 = 1,注意第n个位置需要定义dpn+1大小的数组。最终结果就是dpn

cpp 复制代码
class Solution {
public:
    int fib(int n) {
        if (n == 0 || n == 1) {
            return n;
        }
        vector<int> dp(n+1);
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i<=n; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }
};

70. 爬楼梯
比斐波那契难一点,但是也有迹可循。一次只能爬两蹬或者一蹬,那么本台阶可由上一阶爬来,也可由上上阶爬来,因此其和即为本蹬数量。而本蹬数量取决于上两凳,因此形成递推关系。dp大小也为n+1。

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 2)  return n;
        vector<int> dp(n+1);
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        for (int i  = 0; i<=n ;i++){
            cout<<dp[i]<<endl;
        }
        return dp[n];
    }
};

57. 爬楼梯(第八期模拟笔试)
卡码网中的题目。如果题目改为一次可爬1------n怎么解,其实本阶梯可由前n级阶梯到达(如果有的话)。那么就可以两层循环解决。

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;
int main() {
    int n,m;
    cin>>n>>m;
    std::vector<int> dp(n+1,0);
    dp[0] = 1;
    for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=m; j++) {
            // 向前找m个位置,各个位置都可以到达i,因此累加前面的结果
            if (i-j >= 0) dp[i] += dp[i-j];
        }
    }
    cout<<dp[n];
}

746. 使用最小花费爬楼梯
这题出发点可以是0也可以是1,因此从零出发和从1出发都不需要消耗体力。dp数组可以初始化为0。而本台阶可以由上一个台阶爬到,消耗体力x,也可以由上上个台阶爬到,消耗体力y;则达到本台阶消耗的最小体力为min(dpi-1+costi-1, dpi-2+costi-2)。注意最后需要爬到房顶,因此dp大小n+1。

cpp 复制代码
    class Solution {
    public:
        int minCostClimbingStairs(vector<int>& cost) {
            vector<int> dp(cost.size()+1);
            // 可以从0 也可以从1出发,那么初始化0 和 1位置为0消耗
            dp[0] = 0;
            dp[1] = 0;
            // 需要爬到楼顶, 因此i的值需要最终等于cost的大小
            for (int i = 2; i <= cost.size(); i++) {
                dp[i] = min(dp[i-2] + cost[i-2], dp[i-1] + cost[i-1]);
            }
            // 返回dp数组的最后一个值即为结果
            return dp[cost.size()];
        }
    };
相关推荐
ECT-OS-JiuHuaShan1 分钟前
共轭互逆链路论,彻底打击庸俗辩证法和不可知论
数据库·人工智能·算法·机器学习·数学建模
薛定e的猫咪3 分钟前
【大模型量化】使用 llama.cpp 完成量化、本地推理与服务化部署
人工智能·深度学习·算法·llama
薛定e的猫咪8 分钟前
【源码解读版】ContraBAR:用 CPC 对比学习替代变分推断做贝叶斯元 RL
人工智能·深度学习·学习·算法·机器学习
绿算技术1 小时前
大模型本地化的经济账:DeepSeek V4 Flash 部署实测
人工智能·科技·算法·spark
翟天保Steven1 小时前
用于提升CBCT低对比度组织分辨率的三维图像后处理方法
算法·计算机视觉·图像重建·图像后处理
FII工业富联科技服务1 小时前
GW级AI数据中心怎么建?Omniverse、CFD、液冷与BMS技术路径拆解
服务器·人工智能·算法·能源·制造
roman_日积跬步-终至千里1 小时前
【算法五】从斐波那契到动态规划:自顶向下、自底向上与状态压缩
算法·动态规划
wuyk5552 小时前
9.冒泡排序:像鱼缸泡泡一样的简单排序算法
开发语言·stm32·单片机·算法·排序算法
无限码力4 小时前
8.26华为OD机试真题 新系统【字符串回文判断】
算法·华为od·华为od机考·华为od机试·华为od上机考试真题·华为od最新机试真题题解·华为od机试真题题库
Tisfy5 小时前
LeetCode 1927.求和游戏:抵消+看最值
java·leetcode·游戏·题解·博弈论