Dynamic programming is a technique related to divide and conquer for situations where there may be overlapping subproblems in the recursion. The idea here is to reuse the answers to such sub-problems. This algorithm design concept is illustrated by weighted interval scheduling, segmented least squares, knapsack, RNA secondary structure, sequence alignment, and the shortest path problem.

Back to top