Dynamic programming digunakan untuk menyelesaikan masalah yang optimal :
1. memecah masalah kompleks menjadi subproblem sederhana.
2. menemukan solusi optimal untuk submasalah ini 3. menyimpan hasil dari subproblem (memoization) 4. menolaknya sehingga subproblem yang sama tidak dihitung lebih dari sekali 5. akhirnya menghitung hasil dari masalah rumit
Berlaku untuk masalah yang memiliki property seperti subproblem yang tumpang tindih dan substruktur yang optimal