การเขียนโปรแกรมแบบไดนามิก (DP) แก้ไขปัญหาที่มี ปัญหาย่อยที่ทับซ้อน และ โครงสร้างที่เหมาะสม โดยการคำนวณปัญหาย่อยแต่ละครั้งเพียงครั้งเดียวและนำผลลัพธ์กลับมาใช้ใหม่ สองรูปแบบคือ memoization (top-down) และ tabulation (bottom-up)
แนวคิด
การวนซ้ำแบบไร้เดียงสาจะคำนวณปัญหาย่อยเดียวกันซ้ำแบบยกกำลัง DP จะจำไว้ โดยยุบงานแบบยกกำลังให้เป็นพหุนาม
