Programowanie dynamiczne rozwiązuje problem przez rozbicie go na mniejsze podproblemy i zapisanie wyników, żeby nie liczyć tego samego wiele razy. Stosuj je, gdy podproblemy się powtarzają, a najlepsze rozwiązanie da się złożyć z najlepszych rozwiązań części (memoizacja/top‑down lub tabela bottom‑up).