斐波那契
96. Unique Binary Search Trees
64. minimum path sum
都是典型的dp问题
他们的共同点是具有相同结构的子问题
在这种情况下就要 利用dp table记录已经得到的结果
动态规划的核心还是穷举,这类问题由于存在【重叠的子问题】,暴力穷举效率太低,需要利用备忘录或者dp table来减少不必要的计算。
递归算法的时间复杂度:
子问题的个数*一个子问题所用的时间
子问题的个数,即递归树中节点的总数。二叉树节点的总数为指数级别,2^n
带备忘录的递归解法-自顶向下
迭代的动态规划 -自底向上
即动态规划从问题规模最小向上推,直到推到答案。所以dp一般都是用循环迭代。
动态规划问题最困难的就是写出状态转移方程,即这个暴力解。优化方法无非是用备忘录或者 DP table,再无奥妙可言。
- 零钱兑换
62和64简直就是一样
先做了64再做62就是降维打击了,当然62有更简单的数学方法
更为神奇的是,64和1143最长公共子序列竟有异曲同工之妙
1143题干又可衍生出诸多变化
坐在计程车上,想到这里,竟然生出一股大圆满之意
718 Maximum Length of Repeated Subarray 标准的dp问题
300 longest increasing subsequence