Skip to Content

Optimizaciones y técnicas adicionales de DP

Optimización de Knuth

Tutoriales

Recursos
FuenteRecursoNotas
Jeffrey XiaoKnuth's Optimization
GCP15.4.3 - Knuth's Optimization
GFGKnuth's Optimization in Dynamic Programming

Buena explicación + demostración de corrección

La Optimización de Knuth es un caso especial de DP de rangos. En general, se usa para resolver problemas de DP con transiciones de la forma

dp[i][j]=cost[i][j]+min⁡i≤k<j(dp[i][k]+dp[k+1][j]). \texttt{dp}[i][j] = \texttt{cost}[i][j] + \min_{i\leq k<j}(\texttt{dp}[i][k] + \texttt{dp}[k+1][j]).

Además, la función de costo debe satisfacer las siguientes condiciones para todo a≤b≤c≤da\leq b\leq c \leq d:

  1. cost[b][c]≤cost[a][d]\texttt{cost}[b][c] \leq \texttt{cost}[a][d]
  2. cost[a][c]+cost[b][d]≤cost[a][d]+cost[b][c]\texttt{cost}[a][c] + \texttt{cost}[b][d] \leq \texttt{cost}[a][d] + \texttt{cost}[b][c] (la desigualdad del cuadrángulo)

Definimos opt[i][j]\texttt{opt}[i][j] como el índice para el cual dp[i][k]+dp[k+1][j]\texttt{dp}[i][k] + \texttt{dp}[k+1][j] alcanza su valor mínimo, o de forma equivalente,

opt[i][j]=arg min⁡i≤k<j(dp[i][k]+dp[k+1][j]). \texttt{opt}[i][j] = \argmin_{i\leq k<j}(dp[i][k] + dp[k+1][j]).

Si existe más de un índice así, tomamos el mínimo (o el máximo; no importa). Entonces, asumiendo que se cumplen las condiciones sobre la transición de DP y la función de costo, se puede demostrar que opt\texttt{opt} satisface

opt[i][j−1]≤opt[i][j]≤opt[i+1][j]. \texttt{opt}[i][j-1] \leq \texttt{opt}[i][j] \leq \texttt{opt}[i+1][j].

La demostración de corrección de esta afirmación está en los recursos de arriba.

La estructura del código es idéntica a la de DP de rangos , con la excepción de mantener el arreglo opt\texttt{opt}. Para calcular dp[i][j]\texttt{dp}[i][j] y opt[i][j]\texttt{opt}[i][j], solo hace falta revisar valores de kk entre opt[i][j−1]\texttt{opt}[i][j-1] y opt[i+1][j]\texttt{opt}[i+1][j]. Por la monotonicidad de opt\texttt{opt}, se puede demostrar que la complejidad temporal del algoritmo final es O(N2)\mathcal{O}(N^2).

Problemas de Optimización de Knuth

HechoFuenteNombreDificultadTagsSolución
CF★ Trucks and CitiesFácil—
SPOJBreaking StringsNormal—
onlinejudge.orgGain Battle PowerNormal—
onlinejudge.orgOptimal Binary Search TreeDifícilSolución

DP de componentes conexas

Recursos
FuenteRecursoNotas
CFzscoder - Nontrivial DP Techniques

Técnicas misceláneas

Problemas de DP de componentes conexas

HechoFuenteNombreDificultadTagsSolución
CSES★ Permutations IIFácilSolución
CFMonocarp and the SetFácil—
CEOI2016 - KangarooNormal—
CFMCO - Magical TeleporterNormal—
JOI★ 2016 - SkyscraperNormalSolución
CFPhoenix and ComputersNormal—