题解:CF633D Fibonacci-ish
原题
题目描述
Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a sequence Fibonacci-ish if
- the sequence consists of at least two elements
- $ f_{0} $ and $ f_{1} $ are arbitrary
- $ f_{n+2}=f_{n+1}+f_{n} $ for all $ n>=0 $ .
You are given some sequence of integers $ a_{1},a_{2},…,a_{n} $ . Your task is rearrange elements of this sequence in such a way that its longest possible prefix is Fibonacci-ish sequence.
输入格式
The first line of the input contains a single integer $ n $ ( $ 2<=n<=1000 $ ) — the length of the sequence $ a_{i} $ .
The second line contains $ n $ integers $ a_{1},a_{2},…,a_{n} $ ( $ |a_{i}|<=10^{9} $ ).
输出格式
Print the length of the longest possible Fibonacci-ish prefix of the given sequence after rearrangement.
输入输出样例 #1
输入 #1
3
1 2 -1
输出 #1
3
输入输出样例 #2
输入 #2
5
28 35 7 14 21
输出 #2
4
说明/提示
In the first sample, if we rearrange elements of the sequence as $ -1 $ , $ 2 $ , $ 1 $ , the whole sequence $ a_{i} $ would be Fibonacci-ish.
In the second sample, the optimal way to rearrange elements is ,
,
,
, $ 28 $ .
思路
先看数据范围 2 ≤ n ≤ 1000 2≤n≤1000 2≤n≤1000,直接暴力加剪枝就能过。
我们首先用 map 建一个桶,统计每个数出现的次数,然后用双重 for 循环枚举前两个数。
然后,我们再来看如何剪枝:
- 如果 2