CF813D Two Melodies
题目描述
Alice 是一名初学作曲家,现在她准备创作另一部杰作,而且还不止一部,而是同时创作两首!
Alice 有一张写有 $ n $ 个音符的曲谱。她想要从中取出两个非空且互不相交的子序列,使得它们都能组成一支「旋律」,并且这两个子序列长度之和最大。
子序列是指可以通过从原序列中删除某些元素(不改变剩余元素的相对顺序)得到的新序列。
如果一个子序列中每相邻的两个音符要么相差 1,要么同余于 7(即模 7 同余),那么这个子序列就构成了一支旋律。
请你写一个程序,计算出满足条件的两个非空互不相交「旋律」子序列长度之和的最大值。
输入格式
第一行包含一个整数 $ n $($ 2 \leq n \leq 5000 $)。
第二行包含 $ n $ 个整数 $ a_{1}, a_{2}, \dots, a_{n} $($ 1 \leq a_{i} \leq 10^5 $),表示曲谱上的音符。
输出格式
输出满足条件的两个非空互不相交「旋律」子序列最大长度之和。
说明/提示
在第一个样例中,子序列 $[1,2]$ 和 $[4,5]$ 的总长度为 4。
在第二个样例中,子序列 $[62,48,49]$ 和 $[60,61]$ 的长度和为 5。如果你一开始选择子序列 $[62,61]$,那么第二个旋律的最大长度只能为 2,总和为 4,不是最大值。
由 ChatGPT 5 翻译