Two basic paradigms
Break problem down into smaller, more easily solved pieces.
typically, split problem in half, solve each half,
combine results to get full solution
Dynamic programming
- characterize structure of an optimal solution
- recursively define value of an optimal solution
- compute the value of an optimal solution in bottom-up fashion
- construct an optimal solution from computed information