Dynamic programming is a problem-solving technique best suited for problems that can be broken down into smaller recursive subproblems whose answers are frequently needed in computing the overall problem. After solving a subproblem, the result is stored and then used in the larger overarching problem to build an overall solution. This technique may save a lot of time compared to a traditionally recursive approach, because the answers to subproblems can just be looked up instead of computed again. The process of storing and looking up the subproblem solutions is called "memoization."