Programação dinâmica (DP) resolve problemas com subproblemas sobrepostos e subestrutura ótima computando cada subproblema uma vez e reutilizando o resultado. Os dois estilos são memoização (top-down) e tabulação (bottom-up).
A ideia
Recursão ingênua recomputa os mesmos subproblemas exponencialmente. DP os coloca em cache, transformando trabalho exponencial em polinomial.
