Editorial for Caja de puros
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Digamos que una operación es esencial cuando es la última operación que se aplica a ese número.
La condición de que el número de operaciones esenciales debe satisfacer:
Considere el caso que hicimos
operaciones esenciales que mueven un número al principio y
operaciones esenciales que mueven un número al final. Entonces,
nunca fueron objeto de una operación, por lo que su orden relativo no cambió desde el estado inicial
.
Por tanto, esta secuencia debe aumentar de forma monótona.
Solución en 
El número elegido en la i-ésima última operación esencial que mueve un número al principio será el i-ésimo término en la secuencia final, por lo que esta operación debe elegir a . De manera similar, la i-ésima última operación esencial que mueve un número al final debe elegir a
. Una operación no esencial puede elegir cualquier número que será elegido por una operación posterior y moverlo al principio o al final.
De estos, para tal que
aumenta monótonamente, habrá una secuencia única de operaciones si se decide lo siguiente:
las primeras
operaciones esenciales mueven un número al principio;
las últimas
operaciones esenciales mueven un número hasta el final;
para cada operación no esencial:
- si mueve un número al principio o al final;
- qué operación esencial moverá el número movido por esa operación.
Así, podemos encontrar el número de sucesiones de operaciones de longitud
que contiene
operaciones esenciales al principio y
operaciones esenciales hasta el final,
, con la siguiente programación dinámica: (la fórmula de recurrencia corresponde a construir la secuencia de operaciones hacia atrás).
for i = 0..m, l = 0..n, r = 0..n
dp [i + 1] [l] [r] + = dp [i] [l] [r] * 2 * (l + r)
dp [i + 1] [l + 1] [r] + = dp [i] [l] [r]
dp [i + 1] [l] [r + 1] + = dp [i] [l] [r]
Después de calcular , podemos sumar
sobre todo
tal que
aumenta monótonamente para encontrar la respuesta, pero este método tendrá la complejidad de
.
Otra solución en 
Aquí, sea
(es decir, el número de enteros que estarán sujetos a alguna operación).
Sea el número de formas de decidir lo siguiente para una secuencia de operaciones de longitud
que contiene
operaciones esenciales:
- si cada operación es esencial;
- para cada operación no esencial, qué operación esencial moverá el número movido por esa operación.
Elegir cuáles de las j operaciones esenciales moverán un número al principio determinará la secuencia de operaciones, así que tenemos (binom es el coeficiente binomial).
Podemos calcular de la siguiente manera:
for i = 0..m, j = 0..n
dp2 [i + 1] [j] + = dp2 [i] [j] * 2 * j
dp2 [i + 1] [j + 1] + = dp2 [i] [j]
Ahora podemos resolver el problema en .
tiempo, que es lo suficientemente rápido bajo las limitaciones.
Hay otra solución con combinatoria en lugar de dp.
Comments