Editorial for Nizin
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Primero analicemos las soluciones subóptimas de la sección PUNTUACIÓN.
Para el de los puntos, la tarea podría haberse resuelto mediante una búsqueda exhaustiva. En otra
palabras, podríamos haber modificado el arreglo de todas las formas posibles y, al final, generar el
número mínimo de movimientos que conducen a la solución. Como podemos hacer
diferentes uniones en un arreglo de longitud
, y porque después de cada movimiento la longitud de la matriz
disminuye en 1, llegamos a la conclusión de que la complejidad de esta solución es
.
Primero observemos el primer y último miembro del arreglo. Ya que deseamos transformar el arreglo a un palíndromo, el primer miembro y el último deben ser iguales al final. Si no lo son
iguales en el momento dado, obviamente al menos uno de ellos debe estar unido a su vecino.
Este tipo de pensamiento nos lleva a una formulación recursiva de la solución. Sea el
número mínimo de movimientos necesarios para que los elementos
se transformen en
palíndromo. Dadas las observaciones anteriores,
- Si
- Si \(l <= r, f (l, r) = mínimo (1 + f (l + 1, r), 1 + f (l, r - 1), f (l + 1, r-1))\)
donde las dos primeras partes del segundo caso es válido si y solo si tiene . Observe que en cada paso del algoritmo, el valor
es igual a la suma de todos sus
predecesores, y
es igual a la suma de todos sus sucesores, mientras que los elementos en el
medio no se modifican. Usando un enfoque de programación dinámica, más precisamente la técnica de movilización, la complejidad de tal solución es
, que es suficiente para el
de puntos.
Para obtener todos los puntos, necesitamos usar el hecho de que los números en la entrada son
positivo. Como en el párrafo anterior, abordamos la tarea desde fuera hacia dentro. Cuándo
nos centramos en un intervalo , diferenciamos entre un par de casos:
Si tiene
, entonces no necesitamos unir los elementos externos, sino que continuamos
resolviendo el intervalo
.
Si tiene
, entonces seguramente no podemos beneficiarnos de unir los elementos
y
porque su suma es necesariamente mayor que
que no se puede dejar sin unir. Por lo tanto, lo haremos
uniendo los elementos
y
y continuamos resolviendo el intervalo
. Resolvemos análogamente
el caso donde
.
Dado que disminuiremos el intervalo en al menos
en cada paso del algoritmo, podemos
Concluimos que la complejidad del algoritmo es
, suficiente para todos los puntos.
Comments