代码随想录冲冲冲 Day31 动态规划Part1

509. 斐波那契数

经典永流传 t[3] = t[2] + t[1]的经典induction;

虽然一步递归直接出很简单 但是还按照总结的步骤写

1.dp数组记录当前数字

2.递推公式为F(n) = F(n-1) + F(n-2)

3.初始化 F 0 = 0  F 1 = 1;

4.遍历顺序直接从前到后

5.由于直接用两个就可以了 所以更新dp[2]就可以了

70. 爬楼梯

跟上非常类似,到第三个阶梯的方式就是第一个方式+第二个的方式

唯一不一样的是初始化 dp 0 = 1 dp 1 = 2

后续都一样

746. 使用最小花费爬楼梯

version 1 :

1.dp数组代表到每一个 i 最小花费是多少

2.递推公式: 到第三个节点的最小花费 = min(前两个的最小花费 + cost[i])

3.初始化 F 0 = 0  F 1 = 0;因为这个题目的第一步其实没有花费 所以无论是 0 还是 1 都是0

4.遍历顺序直接从前到后,中间需要更新第i个的最小花费

5.省略

注意的是 走完其实是走到最后一个元素再之后一个 所以dp大小是cost.size() + 1 返回值当然也就是dp[cost.size()],如果dp大小是cost.size() 那就要返回最后一步的比较逻辑min(.....);

version 2:省空间

1.dp数组代表到每一个 i 最小花费走到下一个位置 

2.递推公式: 第三个节点走到一下个节点的最小花费 = min(前两个的最小花费 )+ 第三个节点本身的花费

3.初始化 F 0 = cost[0]  F 1 = cost[1];

4.遍历顺序直接从前到后,dp[0] 和 dp[1]

5.省略

最后返回的min(dp0,dp1)也就是倒数这两个节点哪个哪个走完需要的花费最小

当然也就是走完最小的

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值