La programación dinámica es una técnica para resolver problemas de optimización dividiéndolos en subproblemas. Resuelve cada subproblema una vez y almacena la solución para usarla en problemas mayores, evitando calcular lo mismo varias veces. Se aplica cuando los subproblemas óptimos definen la solución óptima general y hay solapamiento entre subproblemas.