# Dynamic Programming A programming technique for decomposing a problem into smaller discrete subproblems. - Useful when trying to optimize something given a constraint. - Example, items in a knapsack of size W that gives the greatest value.