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