Dynamické programování (DP) řeší problémy s overlapping subproblems a optimal substructure výpočtem každého podproblému jednou a znovupoužitím výsledku. Dva styly jsou memoization (top-down) a tabulation (bottom-up).
Myšlenka
Naivní rekurze počítá stejné podproblémy exponenciálně znovu. DP je cachuje, čímž sbaluje exponenciální práci na polynomiální.
