Dinamično programiranje (DP) rešuje probleme s prekrivajočimi se podproblemi in optimalno podstrukturno lastnostjo z računanjem vsakega podproblema enkrat in ponovno uporabo rezultata. Dva slogova sta memoizacija (od vrha navzdol) in tabelaranje (od spodaj navzgor).
Ideja
Naivna rekurzija ponovno izračuna iste podprobleme eksponentno. DP jih shranjuje, kar zruši eksponentno delo v polinomsko.
