Dynamic programming (DP) menyelesaikan masalah dengan overlapping subproblems dan optimal substructure dengan menghitung setiap subproblem sekali dan menggunakan kembali hasilnya. Dua gaya adalah memoization (top-down) dan tabulation (bottom-up).
Idenya
Rekursi naif menghitung ulang subproblem yang sama secara eksponensial. DP mem-cache-nya, mengubah pekerjaan eksponensial menjadi polinomial.
