La programación dinámica es un enfoque general para la solución de problemas en los que es necesario tomar decisiones en etapas sucesivas. Las decisiones tomadas en una etapa condicionan la evolución futura del sistema y las situaciones futuras. A diferencia de la programación lineal, cada problema de programación dinámica requiere especificar sus componentes de manera individual.