- solving a problem with dynamic programming is equivalent to
- (a) a problem that can be solved with recursion
- (b) memoization (on the recursive function) can avoid recalculations

- I found the above "definition" make the most sense for me, b/c
- (a) is fairly easy to determine
- (b) given a solution, is fairly easy to determine

- (in CLRS, they describe dynamic programming as: divide-and-conquer, but, when subproblems overlap ... and saving intermediate results to table)