Dynamic Programming
- overlap subproblems
- transition formula
- bottom-up or top-down for loop
- use a global variable to update global min or max
- (i,j) max or min DP, usually involved with traverse i < k < j
- DP return path, use 2D array store boolean and use dfs to build path