Dynamic Programming Summary
1. Formulate answer as recurrence relation or recursive algorithm
2. Show that number of values of recurrence bounded by poly
3. Specify order of evaluation for recurrence so have partial results when you need them.
DP works particularly well for optimization problems with inherent left to right ordering among elements.
Resulting global optimum often much better than solution found with heuristics.
Once you understand it, usually easier to work out from scratch a DP solution than to look it up.