CF 255 C Almost Arithmetical Progression

来源:互联网 发布:淘宝卖家违规价格优化 编辑:程序博客网 时间:2024/06/07 16:51

Gena loves sequences of numbers. Recently, he has discovered a new type of sequences which he called an almost arithmetical progression. A sequence is an almost arithmetical progression, if its elements can be represented as:

  • a1 = p, where p is some integer;
  • ai = ai - 1 + ( - 1)i + 1·q (i > 1), where q is some integer.

Right now Gena has a piece of paper with sequence b, consisting of n integers. Help Gena, find there the longest subsequence of integers that is an almost arithmetical progression.

Sequence s1,  s2,  ...,  sk is a subsequence of sequence b1,  b2,  ...,  bn, if there is such increasing sequence of indexes i1, i2, ..., ik (1  ≤  i1  <  i2  < ...   <  ik  ≤  n), that bij  =  sj. In other words, sequence s can be obtained from b by crossing out some elements.

Input

The first line contains integer n (1 ≤ n ≤ 4000). The next line contains n integers b1, b2, ..., bn (1 ≤ bi ≤ 106).

Output

Print a single integer — the length of the required longest subsequence.

Example
Input
23 5
Output
2
Input
410 20 10 30
Output
3
Note

In the first test the sequence actually is the suitable subsequence.

In the second test the following subsequence fits: 10, 20, 10.




一个dp题目

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>#include <vector>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 4000+5;int num[maxn];int dp[maxn][maxn];int N;int main(){scanf("%d",&N);for(int i = 1; i <= N; i++)scanf("%d",&num[i]);memset(dp,0,sizeof(dp));int res = 0;for(int i = 1; i <= N; i++){int temp = 0;for(int j = 0; j < i; j++){dp[i][j] = dp[j][temp]+1;if(num[i] == num[j])temp = j;res = max(res,dp[i][j]);}}printf("%d\n",res);return 0;}

原创粉丝点击