Solving problems with overlapping subproblems using memoization and tabulation.
Open Dynamic Programming on ExamMaster