Dynamic Programming

Status: draft · Confidence: low (0.43) · Basis: verified_sources

Quality notes: generic_source_homepage, no_verified_sources, partial_source_verification




## TL;DR

DP solves problems by breaking them into overlapping subproblems, solving each once (memoization/tabulation). Converts exponential to polynomial time. Requires optimal substructure. Classic: Fibonacci, knapsack, LCS, edit distance.

## Core Explanation

Top-down: recursion + cache (memoization). Bottom-up: iterative table filling (tabulation). 0/1 Knapsack: max value from n items with weight limit — O(nW) pseudo-polynomial. Longest Common Subsequence: O(mn). DP vs. greedy: greedy makes locally optimal choice (may fail globally); DP explores all possibilities via subproblem decomposition.

## Further Reading

- [Introduction to Algorithms (CLRS)](undefined)

## Related Articles

- [AI for Retail: Cashierless Stores, Dynamic Pricing, and Personalized Shopping](../../ai/ai-for-retail.md)
- [C++ Programming Language](../c++-language.md)
- [C Programming Language](../c-language.md)