Codeforces Round #156 (Div. 2) C. Almost Arithmetical Progression
2016-05-09 23:35
489 查看
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.
Examples
Input
Output
Input
Output
Note
In the first test the sequence actually is the suitable subsequence.
In the second test the following subsequence fits: 10, 20, 10.
分析:DP。
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.
Examples
Input
2 3 5
Output
2
Input
4 10 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 <cstdio> #include <iostream> #include <unordered_map> using namespace std; unordered_map <int,int>f; int n,tot,a[4001],dp[4001][4001]; int main() { cin.sync_with_stdio(false); cin>>n; for(int i = 1;i <= n;i++) { cin>>a[i]; if(f.count(a[i]) == 0) f[a[i]] = ++tot; } int ans = 1; for(int i = n-1;i;i--) for(int j = i+1;j <= n;j++) { int J = f[a[j]]; int I = f[a[i]]; dp[i][J] = max(2,dp[i][J]); dp[i][J] = max(dp[i][J],1+dp[j][I]); ans = max(ans,dp[i][J]); } cout<<ans<<endl; }
相关文章推荐
- odbc连接数据库
- 文件管理 - 4
- Linux:例行性工作
- hdu_4826_Labyrinth_2014百度之星(dp)
- BZOJ 1030 【JSOI2007】文本生成器
- Go语言学习(十三)面向对象编程-继承
- 多线程之生产者和消费者模式
- hdu_4826_Labyrinth_2014百度之星(dp)
- Hadoop学习14--Hadoop之一点点理解yarn
- Tomcat server.xml配置
- 抽象工厂模式- c++实现
- 自定义标签
- 浅谈android中的mvc模式
- 制作Ubuntu deb包的三种方法
- 解决IDAPython: importing "site" failed.的问题
- Ubuntu14.04下自己编译安装和卸载软件
- IC卡文件系统的逻辑结构【转】
- C语言中的静态局部变量
- 小酌重构系列[9]——分解依赖
- 【opencv学习】使用opencv与两个摄像头实现双目标定与测距