La programación dinámica es una estrategia para resolver problemas de optimización dividiéndolos en etapas. Se resuelve cada subproblema de forma independiente para minimizar el número de cálculos, empezando por una pequeña porción del problema original y ampliándolo gradualmente hasta resolverlo completamente. El principio de optimalidad establece que la política óptima para las etapas restantes depende solo del estado actual, independientemente de cómo se llegó a ese estado.