Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia
Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia
Soluciones y Explicación de los problemas ACM ... - ICPC Bolivia
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Explicaciones a <strong>los</strong> <strong>problemas</strong> South American Regionals 2008 30<br />
Caso 1<br />
Don<strong>de</strong> k = 3 la primera ca<strong>de</strong>na es lovxxelyxxxxx y la segunda ca<strong>de</strong>na es xxxxxxxlovely, nos<br />
pi<strong>de</strong> la mayor subsecuencia que empiece por una segmento común <strong>de</strong> tamaño tres o mas, en<br />
este caso lov es el segmento que buscamos y la subsecuencia <strong>de</strong> este segmento es lovely que<br />
tiene una longitud <strong>de</strong> 6, notese que la subsecuencia común mas larga es xxxxxxx <strong>de</strong> longitud 7.<br />
Caso 2<br />
Don<strong>de</strong> k = 1 la primera ca<strong>de</strong>na es lovxxelyxxxxx y la segunda ca<strong>de</strong>na es xxxxxxxlovely,<br />
nos pi<strong>de</strong> la mayor subsecuencia común que empiece por una segmento común <strong>de</strong> tamaño uno<br />
o mas y esto es lo mismo que mostrarle la subsecuencia común mas larga que conocemos, esta<br />
es xxxxxxx que tiene una longitud <strong>de</strong> 7.<br />
Caso 3<br />
Don<strong>de</strong> k = 3 la primera ca<strong>de</strong>na es lovxxxelxyxxxx y la segunda ca<strong>de</strong>na es xxxlovelyxxxxxxx,<br />
el segmento común que buscamos <strong>de</strong> tamaño tres es lov la subsecuencia formada a partir <strong>de</strong><br />
este segmento es lovelyxxxx que tiene una longitud <strong>de</strong> 10, también existe otra en don<strong>de</strong> el<br />
segmento es xxx y la subsecuencia es xxxelyxxxx <strong>de</strong> igual longitud a la anterior.<br />
Caso 4<br />
Don<strong>de</strong> k = 4 la primera ca<strong>de</strong>na es lovxxxelyxxx y la segunda ca<strong>de</strong>na es xxxxxxlovely, en<br />
este caso no existe un segmento común que tenga el tamaño <strong>de</strong> cuatro o mas, a lo mas tiene<br />
un segmento común <strong>de</strong> tres.<br />
La solución en java que planteo es bastante similar al algoritmo anterior, pero en vez comparar<br />
un caracter con otro:<br />
if A[i] = B[j]<br />
C[i,j] := C[i-1,j-1] + 1<br />
la comparación es entre <strong>los</strong> k últimos caracteres, viendo que todos sean iguales para esto agrego<br />
un ciclo adicional en el cual veo si la solución parcial cumple con el requerimiento extra.<br />
Este problema se pue<strong>de</strong> consi<strong>de</strong>rar como <strong>de</strong> gran complejidad si uno no esta familiarizado con<br />
técnicas <strong>de</strong> programación dinámica.<br />
Programa Java que soluciona el problema<br />
import java.util.Scanner;<br />
import static java.lang.Math.max;<br />
class sequence {<br />
public static void main(String[] args) {<br />
Scanner in = new Scanner(System.in);