La programación dinámica es un método para resolver problemas de optimización que pueden dividirse en etapas. Utiliza subproblemas superpuestos y subestructuras ópticas para reducir el tiempo de ejecución de algoritmos. Se basa en el principio de optimalidad de Bellman, donde la solución óptima de un problema depende de la solución óptima de sus subproblemas. Este método es útil para problemas discretos y secuenciales.