Dynamic Programming
Dynamic Programming (DP) breaks down complex problems into smaller subproblems, storing their results to avoid redundant calculations.
Common Patterns and Techniques
- State Machine / Kadane’s Variants: Tracking maximum/minimum ending states at each index (e.g. Maximum Subarray, Maximum Product Subarray, Maximum Subarray Sum with One Deletion).
- 0/1 Knapsack & Unbounded Knapsack: Selecting items under capacity constraints.
- Longest Common Subsequence (LCS) / Edit Distance: Sequence comparison and edit distance alignment.
- 1D / 2D Grid DP: Path counting or cost optimization on grids.