Dynamic Programming

Break complex problems into overlapping subproblems and build up optimal solutions.