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