第九章 动态规划part01(● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯 )

学习目标:

● 理论基础
● 509. 斐波那契数
● 70. 爬楼梯
● 746. 使用最小花费爬楼梯


学习内容:● 理论基础

https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
视频:https://www.bilibili.com/video/BV13Q4y197Wg

动态规划五部曲:
1.确定dp数组(dp table)以及下标的含义
2.确定递推公式
3.dp数组如何初始化
4.确定遍历顺序
5.举例推导dp数组


学习内容:509. 斐波那契数

https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html
视频:https://www.bilibili.com/video/BV1f5411K7mo

var fib = function(n) {
    let dp0 = 0;
    let dp1 = 1;
    let tmp=0
    if(n==0) return dp0;
    if(n==1)return dp1
    for(let i=2;i<=n;i++){
        tmp=dp0+dp1;
        dp0=dp1;
        dp1=tmp
    }
    return tmp
};

学习内容:● 70. 爬楼梯

https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF.html
视频:https://www.bilibili.com/video/BV17h411h7UH

var climbStairs = function(n) {
    let dp1 = 1
    let dp2 = 2
    if(n==1)return dp1
    if(n==2)return dp2
    let tmp=0
    for(let i=3;i<=n;i++){
        tmp = dp1+dp2
        dp1=dp2
        dp2=tmp
    }
    return tmp

};

学习内容:● 746. 使用最小花费爬楼梯

https://programmercarl.com/0746.%E4%BD%BF%E7%94%A8%E6%9C%80%E5%B0%8F%E8%8A%B1%E8%B4%B9%E7%88%AC%E6%A5%BC%E6%A2%AF.html
视频讲解:https://www.bilibili.com/video/BV16G411c7yZ

!!!!!dp[i]的定义:到达第i台阶所花费的最少体力为dp[i]。
dp数组如何初始化:根据题意let dp=[0,0]
遍历顺序:从前往后
for循环遍历:i<=cost.length 第一次写成i<cost.length.他是爬到楼梯顶部,所以需要在多跳一次
var minCostClimbingStairs = function(cost) {
   let dp=[0,0]
   for(let i=2;i<=cost.length;i++){
       //递推公式
       dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
   }
   return dp[dp.length-1]
};

你可能感兴趣的:(算法笔记,动态规划,算法)