Dynamic Programming

A technique for solving problems by breaking them into overlapping subproblems and storing their results to avoid recomputation.