La programación dinámica (DP) resuelve problemas con overlapping subproblems y optimal substructure calculando cada subproblema una vez y reutilizando el resultado. Los dos estilos son memoization (top-down) y tabulation (bottom-up).
La idea
La recursión ingenua recomputa los mismos subproblemas exponencialmente. DP los almacena en caché, colapsando el trabajo exponencial en polinomial.
