#P1007. 数据恢复

数据恢复

题目描述

你是一名数据恢复工程师,正在分析一块损坏的硬盘。硬盘中的数据被组织成不定长数据包,每个数据包的格式固定:

第一个整数是长度字段 LL,表示该数据包后面紧跟着 LL 个数据单元(整数)。

例如,数据包 [3,100,200,300][3, 100, 200, 300] 是合法的:长度 33 后面恰好有 33 个数据。

完整的文件由若干个这样的数据包首尾相连组成,不允许有多余数据。

然而,由于硬盘损坏,你读取到的原始整数序列 aa 中混入了一些错误的值(可能是长度字段错误,也可能是多余的数据)。

你唯一能做的操作是删除任意位置的一个整数(相当于丢弃该字节)。

你的目标是:在尽可能保留更多整数的情况下,使剩余的序列能够恰好分割成若干个合法的数据包。

请你输出最多能保留的整数个数。

输入格式

第一行一个整数 nn,表示原始序列的长度。

第二行 nn 个整数,第 ii 个整数为 aia_i,表示序列中的元素,整数之间以空格分隔。

输出格式

输出一个整数,表示最多能保留的整数个数。

样例

7
3 3 4 5 2 6 1
7
4
5 6 3 2
0
5
1 2 3 4 5
3

样例解释

第一个测试用例中,[3, 3, 4, 5, 2, 6, 1][3,\ 3,\ 4,\ 5,\ 2,\ 6,\ 1] 可以分割成 [3, 3, 4, 5][3,\ 3,\ 4,\ 5][2, 6, 1][2,\ 6,\ 1],保留 77 个整数。

第二个测试用例中,无论如何删除都分割不了,只能全部删除。

第三个测试用例中,可以通过删除第一个和最后一个元素使序列变为 [2, 3, 4][2,\ 3,\ 4],保留 33 个整数。

数据范围

对于 20%20\% 的数据,1n201\le n\le 20

对于 40%40\% 的数据,1n10001\le n\le 1000

对于 100%100\% 的数据,1n2×1051\le n\le 2\times 10^51ai1061\le a_i\le 10^6