תכנות דינמי היא טכניקה לפתרון בעיות במדעי המחשב הכוללת פירוק בעיות מורכבות לתת-בעיות קטנות יותר, פתרון כל תת-בעיית פעם אחת בלבד, ואחסון התוצאות לשימוש עתידי, תוך אופטימיזציה של היעילות.