Dynamic Programming Pattern
Dynamic programming solves each subproblem once and stores the result, trading memory for a huge time win on problems with optimal substructure and overlapping subproblems. Start top-down (memoized recursion), then convert to bottom-up tables.
Typical complexity: Typically O(n·k) time and space (often reducible to O(k))
When to use it
- You're asked for a count, a min/max, or whether something is achievable.
- The naive recursion recomputes the same states repeatedly.
- Choices at each step depend only on a bounded amount of prior state.
Practice problems
Read the approach or generate an interactive, step-by-step lesson:
Deep dive
Dynamic Programming Pattern: How to Spot Overlapping Subproblems Early
A practical guide to recognizing dynamic programming problems, choosing states, and moving from brute force recursion to memoization and tabulation.
Master dynamic programming by doing
codebrew.ai turns each problem into an interactive lesson — trace the algorithm variable by variable until the pattern clicks.
Start a free lesson