回 帖 发 新 帖 刷新版面

主题:等差数列

等差数列(aseq)
【问题描述】
给定n(1<=n<=5000)个数,从中找出尽可能多的数使得他们能够组成一个等差数列.求最长的等差数列的长度.
【输入数据】
第一行是一个整数n,接下来一行包括了n个数,每个数的绝对值不超过10000000.
【输出数据】
对于每个输入数据,输出你所找出的最长等差数列的长度
输入样例
Aseq.in
7
3
8
4
5
6
2
2
输出样例
Asep.out
5

回复列表 (共6个回复)

沙发

除了暴力以外没想到什么好办法。
开个大数组,fillchar 0;
每次a[n,a[n]-a[i]]=max(a[i,a[n]-a[i]]+1,2),如果大于maxnum则覆盖,
最后输出maxnum。
(好像可以美其名曰动规的)
O (n^2) 
好像大了些,不过不知道有什么别的方法。

板凳

读入;
排序;
求相临数的差;
后面儿自个儿想想吧:)

3 楼

哦,谢谢,我忘了吧、排序了。

4 楼

暴搜超时吧?

5 楼

應該還好吧,排完序后應該工作量會很小。

6 楼

仔细分析分析,有点简单。
总结一下其他高手的评语。

我来回复

您尚未登录,请登录后再回复。点此登录或注册