← capítulo

Fundamentos de programación dinámica

Para subproblemas TRASLAPADOS: calcula cada uno una vez, recuérdalo. DP = recursión + memoria.

El problema con la recursión ingenua

Dos estilos, la misma tabla

Mira la tabla llenarse

dp[a] = 1 + min(dp[a−1], dp[a−3], dp[a−4]). Cada celda consultada ya está lista. dp[6] = 2 (3+3) — donde el 4+1+1 = 3 de greedy se equivocó.

Exponencial → polinomial

Monto 20: ingenua 38,000 llamadas, DP 60 → 640× menos. La DP cambia la CLASE de complejidad.

Para llevar

La parte difícil es definir el ESTADO + la recurrencia; la memoización es mecánica. Resuelve lo que greedy no puede (greedy se equivoca 13% aquí) considerando todas las opciones. Sigue: knapsack — la DP que greedy demostrablemente no puede resolver.