#P14894. [ICPC 2018 Yokohama R] Arithmetic Progressions

    ID: 16711 远端评测题 5000ms 512MiB 尝试: 0 已通过: 0 显示难度普及 上传者: 标签>动态规划 DP2018ICPC双指针 two-pointer哈希表横浜

[ICPC 2018 Yokohama R] Arithmetic Progressions

题目描述

等差数列是一列数字 a1a_1, a2a_2, …\ldots, aka_k,其中连续项之间的差 ai+1−aia_{i+1} - a_i 是一个常数(1≤i≤k−11 \leq i \leq k-1)。例如,序列 55, 88, 1111, 1414, 1717 是一个长度为 55、公差为 33 的等差数列。

在本问题中,你需要从给定的一个数字集合中选出一些数字,找出可以形成的最长等差数列。例如,如果给定的数字集合是 {0,1,3,5,6,9}\{0, 1, 3, 5, 6, 9\},你可以形成公差为 33 的等差数列 00, 33, 66, 99,或者公差为 −4-4 的等差数列 99, 55, 11。在这种情况下,等差数列 00, 33, 66, 99 和 99, 66, 33, 00 是最长的。

输入格式

输入包含单个测试用例,格式如下。

$$\begin{aligned} &n \\ &v_1 & v_2 & \cdots & v_n\\ \end{aligned}$$

nn 是集合中元素的数量,是一个满足 2≤n≤50002 \leq n \leq 5000 的整数。每个 viv_i (1≤i≤n1 \leq i \leq n)是集合中的一个元素,是一个满足 0≤vi≤1090 \leq v_i \leq 10^9 的整数。所有的 viv_i 互不相同,即如果 i≠ji \neq j,则 vi≠vjv_i \neq v_j。

输出格式

输出从给定数字集合中选出一些数字可以形成的最长等差数列的长度。

6
0 1 3 5 6 9
4
7
1 4 7 3 2 6 5
7
5
1 2 4 8 16

2