Programowanie dynamiczne (DP) rozwiązuje problemy z nakładającymi się podproblemami i optymalną podstrukturą, obliczając każdy podproblem raz i ponownie używając wyniku. Dwa style to memoizacja (top-down) i tabulacja (bottom-up).
Idea
Naiwna rekurencja ponownie oblicza te same podproblemy wykładniczo. DP je cache'uje, zmniejszając wykładniczą pracę do wielomianowej.
