Editorial for Descubriendo ADN
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Te explico mi solución con DP. Definamos a como la mínima cantidad de movimientos que necesitamos para que el prefijo hasta la posición sea , sólo va tomar dos valores si estamos analizando la cadena original, y si estamos analizando la cadena original invertida (o sea, todas las se transforman en y viceversa, por ejemplo, la cadena invertida de es ).
- Podemos ver fácilmente que si no tenemos a ningún caracter en el prefijo entonces no es necesario hacer ningún movimiento por tanto:
- Si estamos evaluando la cadena original y el caracter que evaluamos es una entonces no necesitamos hacer ningún movimiento extra, por lo que la cantidad de movimientos que tenemos que hacer para que el prefijo hasta sea es la misma cantidad de movimientos para que el prefijo sea , por lo que en este caso
- Si estamos evaluando la cadena invertida y el caracter en la posición de la cadena original es significa que estamos evaluando el caracter en la cadena invertida, entonces hay dos movimientos posibles: cambiar un caracter, aquí la solución sería la misma cantidad de movimientos que teníamos para que el prefijo sea en la cadena invertida más el movimiento extra de cambiar la por la ; invertir el prefijo donde la solución sería la misma cantidad de movimientos que teníamos en el prefijo en la cadena original más el movimiento extra de invertir el prefijo , como queremos quedarnos con la mínima cantidad de movimientos nos quedaremos con el mínimo de estos dos casos:
- Si estamos evaluando la cadena original y el caracter en la posición es hacemos un análisis similar al del caso y nos queda que:
- Si estamos evaluando la cadena invertida y el caracter en la posición de la cadena original es significa que en la cadena invertida estamos evaluando el caracter , realizando un análisis similar al del caso nos queda que:
La solución nos queda en . Esto tiene una complejidad en tiempo y memoria. Se pueden hacer optimizaciones en memoria para que quede pero no es necesario en este problema.
Comments