动态规划要把握住核心的五个步骤
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 举例推导dp数组
斐波那契数列
爬楼梯
本题关键在于意识到,走到第n层台阶的方法总数由第n-1层台阶和第n-2层台阶的方法数决定,想到这一点之后,初始化就不难想到了
使用最小花费爬楼梯
哈哈哈这道题是我自己想出来的,没看题解
不同路径
自己想出来的捏,这道题不知道是不是因为比较可爱的缘故,印象很深刻
不同路径Ⅱ
这道题最开始写错了,主要问题就在于对dp数组的定义不清晰,最开始没有意识到dp[m][n]应该代表“到达了dp[m][n]位置的总路径数”,也就意味着,如果[m][n]位置有障碍物,是无法到达的,所以递推公式应该考虑到这一点。
之前还错误地考虑了当前所在位置的上和左是否可能存在障碍物,但这并不应该是当前位置考虑的问题,我在这个位置,只要考虑我的问题就好了,至于上和左是不是被阻塞,应该是上和左本身去考虑的。这也是因为对于dp数组定义不清晰导致的逻辑bug