Dynaaminen ohjelmointi (DP) ratkaisee ongelmia, joissa on overlapping subproblems ja optimal substructure, laskemalla jokaisen aliongelman kerran ja käyttäen tulosta uudelleen. Kaksi tyyliä ovat memoization (top-down) ja tabulation (bottom-up).
Ajatus
Naivi rekursio laskee samat aliongelmat uudelleen eksponentiaalisesti. DP tallentaa ne välimuistiin, muuttaen eksponentiaalisen työn polynomiaalista.
