一、动态规划基本思路
1、状态表示:dp[i]的含义是什么
在一维数组中一般是“以 i 位置为结尾 / 起点....”
2、状态转移方程:dp[i]等于什么
一般是要根据最近的一步分情况进行讨论得出。
3、初始化dp表边界情况:保证在循环填表时不越界
4、填表顺序:从左向右或从右向左
5、确定返回值:不一定就是dp[0]或dp[n - 1]
二、例题
1、泰波那契数列
. - 力扣(LeetCode)
不要用递归,空间复杂度太高。
2、三步问题
. - 力扣(LeetCode)
本质是泰波那契数列,注意如果数字太大每次相加都要取模。
3、爬楼梯
. - 力扣(LeetCode)
思路一:
dp[i] 表示以 i 位置为结尾到达 i 位置时的最小消费,要想到达 i 位置就要距离 i 位置一格或两格,那就是比较距离 i 位置一格的消费和两格的消费,最小的就是 dp[i] 的值。
思路二:
dp[i] 表示以 i 位置为起点到达终点时的最小消费,要想到达终点就是交了 cost[i] 之后跳一步到 i + 1 后从 i + 1 位置到终点或交了 cost[i] 之后跳一步到 i + 2 后从 i + 2 位置到终点,两种情况中的最小消费,就是 dp[i] 的值。
4、解码
. - 力扣(LeetCode)