思路
暴力搜索(递归)
首先不要对递归心存偏见,虽然其在dp问题上时间复杂度很高,但是代码简洁,容易理解,递归方式在很多场合都是有大量应用的,不啻为一个“短小精悍”的工具,比如对于二叉树结构相关问题中。即使对于dp问题,如果能写出递归式,再将其优化成经典的dp也不难。
记忆化搜索
暴力递归中涉及大量的重复计算,记忆化搜索就是将递归计算的状态存储起来,遇到计算过的状态直接返回即可,“以空间换时间”。记忆化搜索就是递归版的动态规划。
经典DP
状态转移方程,其实就是中学学的递推公式。找出这个是解决dp问题的关键,前面已经提到的递归式和递推式殊途同归,这有赖于对问题的理解、抽象和建模,有时需要适当转换一下思路,思维开阔些,keep smart !
典型DP问题
斐波那契数列
跳台阶问题(同fib)
01背包
完全背包
找零钱
最大子数组的和