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