When to use DP?
- Input cannot sort
 - Find minimum/maximum result
 - Check the feasibility 找可行性
 - Count all possible solutions 列出所有解
 
(1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
(2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
(3)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)
4 Types of DP
- 1. Matrix DP (10%)
 - 2. Sequence (40%)
 - 3. Two Sequences DP (40%)*
 - 4. Backpack (10%)
 
通用解法:
1. 状 态 State2. 方程 Function
状态之间的联系,怎么通过小的状态,来算大的状态
3. 初始化 Intialization
最极限的小状态是什么, 起点
4. 答案 Answer
最大的那个状态是什么,终点
Matrix DP
- state: f[x][y] 表示我从起点走到 坐 标x,y……
 - function: 研究走到xy 这个点之前的一步是从哪里走的
 - intialize: 起点
 - answer: 终点
 
Sequence Dp
- state: f[i]表示“ 前i”个位置/数字/字母,(以第i个为)...
 - function: f[i] = f[j] … j 是i之前的一个位置
 - intialize: f[0]..
 - answer: f[n-1]..
 
Two Sequences Dp
- state: f[i][j]代表了第一个sequence的前i个数字/字符 配上第二个sequence的前j个...
 - function: f[i][j] = 研究第i个和第j个的匹配关系
 - intialize: f[i][0] 和 f[0][i](二维数组都要初始化第0行和第0列)
 - answer: f[s1.length()][s2.length()]
 
1. sequences
Climbing Stairs
Unique Paths I
3. two sequences
Edit Distance
没有评论:
发表评论