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 se solapan y la solución óptima depende de soluciones óptimas de subproblemas más pequeños.