la programmation dynamique, tout comme la méthode diviser-pour-régner, résout des problèmes en combinant des solutions de sous-problèmes. Dans ce contexte, "programmation" fait référence à une méthode tabulaire plutôt qu'à la rédaction de code informatique. Les algorithmes diviser-pour-régner partitionnent le problème en sous-problèmes indépendants, qu'ils résolvent récursivement, puis combinent leurs solutions pour résoudre le problème initial.
Cependant, la programmation dynamique diffère en ce qu'elle peut s'appliquer même lorsque les sous-problèmes ne sont pas indépendants. Autrement dit, des sous-problèmes peuvent partager des sous-sous-problèmes. Dans cette situation, un algorithme diviser-pour-régner effectue un travail redondant en résolvant plusieurs fois le même sous-sous-problème. En revanche, un algorithme de programmation dynamique résout chaque sous-sous-problème une seule fois et mémorise sa réponse dans un tableau. Cela évite ainsi de recalculer la solution à chaque rencontre du même sous-sous-problème.
La programmation dynamique est généralement utilisée pour résoudre des problèmes d'optimisation, où de nombreuses solutions possibles existent. Chaque solution a une valeur, et l'objectif est de trouver une solution ayant la valeur optimale, qu'elle soit minimale ou maximale. Il est important de noter qu'une solution optimale n'est pas nécessairement la solution optimale unique, car plusieurs solutions peuvent donner la même valeur optimale.