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
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Explicaciones a <strong>los</strong> <strong>problemas</strong> South American Regionals 2008 24<br />
⎛<br />
⎜<br />
Dij = ⎜<br />
⎝<br />
Buscamos la solución para cada fila.<br />
0 0 1 8 2 1 9<br />
0 0 1 7 3 5 2<br />
0 0 1 2 10 3 10<br />
0 0 8 4 7 9 1<br />
0 0 7 1 3 1 6<br />
for (int i = 0; i < M; i++) {<br />
for (int j = 2; j < N+2; j++) {<br />
D[i][j] = max(D[i][j-1], D[i][j]+D[i][j-2]);<br />
}<br />
}<br />
⎛<br />
⎜<br />
Dij = ⎜<br />
⎝<br />
0 0 1 8 8 9 17<br />
0 0 1 7 7 12 12<br />
0 0 1 2 11 11 21<br />
0 0 8 8 15 17 17<br />
0 0 7 7 10 10 16<br />
Una vez tengamos el valor máximo <strong>de</strong> cada fila, <strong>de</strong>bemos realizar la misma tarea con esos<br />
valores, para ésto guardamos las soluciones en un vector sol[] <strong>de</strong> tamaño igual al número <strong>de</strong><br />
filas más dos vacías.<br />
solij = �<br />
⎞<br />
⎟<br />
⎠<br />
⎞<br />
⎟<br />
⎠<br />
0 0 17 12 21 17 16 �<br />
int[] sol = new int[M+2];<br />
for (int i = 0; i < M; i++) {/guardamos las soluciones <strong>de</strong> cada fila<br />
sol[i+2] = D[i][N+1];<br />
}<br />
for (int i = 2; i < M+2; i++) {//<br />
sol[i] = max(sol[i-1], sol[i]+sol[i-2]);<br />
}<br />
solij = �<br />
0 0 17 17 38 38 54 �<br />
La respuesta <strong>de</strong>l problema se encuentra en el último valor calculado en sol[M+1] = 54.<br />
Si realizamos <strong>los</strong> mismos cálcu<strong>los</strong> el momento <strong>de</strong> leer po<strong>de</strong>mos crear una version mucho mas<br />
simple. Esta version se presenta codificada en lenguaje c.