Editorial for Dos Melodías
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Resolvamos este problema con programación dinámica.
Siendo la respuesta máxima si una melodía termina en la nota número
y otra melodía - en la nota número
.
y
son indexadas en 1, si alguna de estas es 0, entonces la melodía está vacía.
Cómo vamos a actualizar el valor de Primero que todo, actualizaremos el valor de las valores previos de
solo si
. Si
, entonces la respuesta es cero, y si
, entonces tomaremos la respuesta para
.
En segundo lugar, para evitar intersecciones, actualizaremos el valor de usando solo valores de
, donde
y
. Por qué? Porque si nosotros actualizamos el valor de
desde alguna
, y
, entonces puede llevar a alguna intersección (no podemos asegurar que no usamos
en la primera melodía).
Como podemos hacer actualizaciones rápidas? Contaremos desde
hacia
. Entonces, mientras contamos
para algunas
específicas, mantendremos dos arreglos:
- el valor máximo de
encontrado hasta ahora donde
.
- el valor máximo de
encontrado hasta ahora donde
.
Entonces necesitamos contar , el cual será el mayor de 4 valores:
- si añadimos una nota que es congruente módulo 7 con la anterior.
- si añadimos una nota que es menor en 1 a la nota anterior.
- si añadimos una nota que es mayor en 1 a la nota anterior.
- si empezamos una nueva melodía.
Estos valores pueden ser calculados en .
Comments