给定一个包含 N 个整数的序列 A1,A2,…,AN。
若一个整数序列满足对于任意 i≥3,均有
Ai=Ai−1+Ai−2,
则称其为斐波那契数列。
从原序列中选择下标
1≤b1<b2<⋯<bk≤N,
得到子序列 Ab1,Ab2,…,Abk。请找出其中最长的斐波那契子序列。
如果存在多个最长子序列,则输出下标序列 (b1,b2,…,bk) 按字典序最小的一个,即在原序列中位置最靠前的一个,而不是数值序列按字典序最小的一个。
输入格式
第一行包含一个整数 N。
第二行包含 N 个整数,依次表示 A1,A2,…,AN。
输出格式
如果最长斐波那契子序列的长度小于 3,则直接输出 0。
否则,第一行输出一个整数 Len,表示最长斐波那契子序列的长度。
第二行输出 Len 个整数,表示对应的子序列。
样例输入
6
10 1 2 20 30 3
样例输出
3
10 20 30
数据范围
- N≤3000;
- 时间限制为 104 ms;
- 内存限制为 65536 KB。
来源与许可
本题为 ZJU 2672「Fibonacci Subsequence」,题面与测试数据整理自 BZOJ 1987。