Dynamic Programming optimizes exponential recursive solutions by storing subproblem results in memoization tables. Master 1D state transitions, 2D grid DP, 0/1 Knapsack variants, and space compression.
Optimal Substructure: An optimal solution to a problem contains optimal solutions to its subproblems.
Overlapping Subproblems: Recursion repeatedly evaluates identical parameters; memoization caches results.
Top-Down (Memoization) vs Bottom-Up (Tabulation): Recursion + cache vs iterative state array filling.
Space Optimization: Compress 2D matrices to 1D vectors when states only depend on previous rows.