Dynamic programming is a strategy that employs tabulation or memoization, solving subproblems and then reusing those solutions to solve the bigger problem.