代码随想录第32天:动态规划

动态规划中每一个状态一定是由上一个状态推导出来的

动态规划的解题步骤:

1.确定dp数组的下标和具体含义

2.确定递推公式

3.递推数组dp的初始化

4.确定遍历顺序

5.举例推导递推数组

三个关键点:初始化,递推公式,遍历顺序

509. 斐波那契数

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

70. 爬楼梯

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

明白数组下标的含义,表示几层楼梯的方法

递推公式可以倒着思考,到顶的最后方法可能走一步也可能走两步,当人还剩一层台阶时到顶的方法与dp【i-1】方法相同,还有两层时与dp【i-2】次数相同

数组初始化dp【1】=1;dp【2】=2

746. 使用最小花费爬楼梯

复制代码
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();
        vector<int> dp(n+1);
        dp[0]=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];
    }
};

对于动态规划的题目可以先想一下最后一步是如何计算的然后再往前推导就可以了

相关推荐
Sw1zzle5 小时前
算法入门(四):二叉树 - 递归遍历三件套
算法·leetcode
万法若空6 小时前
【算法-查找】查找算法
java·数据结构·算法
海石6 小时前
子树怎么找?树的3种遍历方式来帮忙!
算法·leetcode
海石6 小时前
难度分 1588:思路 + 技巧 = AC
算法·leetcode
珠海西格电力9 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
还有多久拿退休金11 小时前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
KaMeidebaby13 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
是Dream呀13 小时前
基于深度学习的人类行为识别算法研究
人工智能·深度学习·算法
happyprince13 小时前
03_NVIDIA_ModelOpt-量化算法深入
人工智能·深度学习·算法
大鱼>14 小时前
AI+货物追踪:智能快递柜追踪系统
人工智能·深度学习·算法·机器学习