- DP 问题
算法原理:
- 可以表示成离散状态的相并列和矩阵形式,每个元素代表子问题最优解。子问题不依赖更大的子问题
- 最终最优解是多个子问题的最优解来确定(多个状态同时),如果一个状态就是greedy
- index最小的子问题解已知
- 状态转移方程
- 两个方向:“top-down”来分析问题然后bottom-up来优化问题/
- top-down一般用递归来解决,bottome-up一般是iteration来解决
算法复杂度:
- time complexity:某些子问题解应用不止一次,所以memorizaition来节省空间
- space complexity:“某些解只用几次,因此不必在存储”
例题:longest in creaseing subsquence
greedy,使用的话要证明一下多个状态可以用一个状态解释
例题: wiggle subsqueece
例题:背包问题
例题:96 unique binary search tree
numtrees(n-2)*num(1)+.... numtree(1)*nums(n-2), 左右子树排列数,因为bst型确定了,数也就确定了
例题:括号问题,和上面类似
例题:edit 。。。。 状态转移方程。 1h23 min
例题: pattern matching :44 wildcard mathcing
例题:permutations for di sequence