CodeForces

来源:互联网 发布:实力vip软件下载 编辑:程序博客网 时间:2024/06/16 02:05

CodeForces - 255C

wwl 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 wwl has a piece of paper with sequence b, consisting of n integers. Help wwl, 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
2
3 5
Output
2
Input
4
10 20 10 30
Output
3
Note (You Will Win)
In the first test the sequence actually is the suitable subsequence.

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

#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int dp[4010][4010];int a[4010];int main(){    int n;    scanf("%d",&n);    int aa=0;    int xx;    for (int i=1;i<=n;i++){        scanf("%d",&a[i]);        xx=0;        for (int j=0;j<i;j++){            dp[i][j]=dp[j][xx]+1;            if (a[j]==a[i]){                xx=j;            }            aa=max(aa,dp[i][j]);        }    }    printf("%d\n",aa);    return 0;}
原创粉丝点击