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]+minik<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 abcda\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 minik<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][j1]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][j1]\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
CFTrucks 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
CSESPermutations IIFácilSolución
CFMonocarp and the SetFácil
CEOI2016 - KangarooNormal
CFMCO - Magical TeleporterNormal
JOI2016 - SkyscraperNormalSolución
CFPhoenix and ComputersNormal