Day1 动态规划(斐波那契数列,爬楼梯,最小花费爬楼梯,不同路径,不同路径Ⅱ)

97 阅读1分钟

动态规划要把握住核心的五个步骤

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

斐波那契数列

image.png

爬楼梯

本题关键在于意识到,走到第n层台阶的方法总数由第n-1层台阶和第n-2层台阶的方法数决定,想到这一点之后,初始化就不难想到了

image.png

image.png

使用最小花费爬楼梯

哈哈哈这道题是我自己想出来的,没看题解 image.png

不同路径

image.png image.png

自己想出来的捏,这道题不知道是不是因为比较可爱的缘故,印象很深刻

不同路径Ⅱ

image.png

image.png 这道题最开始写错了,主要问题就在于对dp数组的定义不清晰,最开始没有意识到dp[m][n]应该代表“到达了dp[m][n]位置的总路径数”,也就意味着,如果[m][n]位置有障碍物,是无法到达的,所以递推公式应该考虑到这一点。

之前还错误地考虑了当前所在位置的上和左是否可能存在障碍物,但这并不应该是当前位置考虑的问题,我在这个位置,只要考虑我的问题就好了,至于上和左是不是被阻塞,应该是上和左本身去考虑的。这也是因为对于dp数组定义不清晰导致的逻辑bug