Programação dinâmica é um método para resolver problemas de otimização de forma eficiente através da memorização das soluções de subproblemas, evitando recalcular sobreposições. Aplica-se quando os subproblemas têm subestrutura ótima e há sobreposição. Um exemplo é o cálculo de Fibonacci, que pode ser otimizado de exponencial para linear usando programação dinâmica.