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