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)