基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题
 收藏
 取消关注
N个不同的正整数,找出由这些数组成的最长的等差数列。


例如:1 3 5 6 8 9 10 12 13 14
等差子数列包括(仅包括两项的不列举)
1 3 5
1 5 9 13
3 6 9 12
3 8 13
5 9 13
6 8 10 12 14

其中6 8 10 12 14最长,长度为5。
Input
第1行:N,N为正整数的数量(3 <= N <= 10000)。
第2 - N+1行:N个正整数。(2<= A[i] <= 10^9)
Output
最长等差数列的长度。
Input示例
10
1
3
5
6
8
9
10
12
13
14
Output示例
5

真的是被上面的hash给忽悠了,一直想着顺序找然后找对应位置,结果TLE了一个下午。。。郁闷。。。

最后自己发现了一篇论文,看了上面的代码才过的。。。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; #define maxn 10005
int n;
int a[maxn];
short int dp[maxn][maxn]; int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout);
int i,j,k,x,diff,ans,temp;
scanf("%d",&n); for(i=0;i<n;i++)
scanf("%d",a+i);
memset(dp,0,sizeof(dp));
sort(a,a+n); ans=0;
for(i=1;i<n-1;i++)
{
j=i-1;
k=i+1;
while(j>=0 && k<n)
{
if(a[j]+a[k]>2*a[i])
{
j--;
}
else if(a[j]+a[k]<2*a[i])
{
k++;
}
else
{
dp[i][k]=dp[j][i]==0?3:dp[j][i]+1;
if(dp[i][k]>ans)
{
ans=dp[i][k];
}
j--;
k++;
}
}
}
printf("%d\n",ans);
//system("pause");
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

51nod 1055:最长等差数列的更多相关文章

  1. 51Nod 1055 最长等差数列 (dp+哈希)

    1055 最长等差数列  基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 ...

  2. 51nod 1055 最长等差数列

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1055 题意: 思路:先固定一个位置,然后从该中心点出发向两边扫,确实很难 ...

  3. 【51Nod】1055 最长等差数列 动态规划

    [题目]1055 最长等差数列 [题意]给定大小为n的互不不同正整数集合,求最长等差数列的长度.\(n \leq 10000\). [算法]动态规划 两个数之间的差是非常重要的信息,设\(f_{i,j ...

  4. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...

  5. 51nod1055 最长等差数列

    完全一脸懵逼!.dp[i][j]表示i,j为相邻的两项的最大值.两个指针两边扫的思想好劲啊这个!%%% #include<cstdio> #include<cstring> # ...

  6. 51nod-1055-最长等差数列(dp+优化)

    1055 最长等差数列  基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 ...

  7. 51Nod - 1055:最长等差数列 (求最长的等差数列)

    N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不列举) 1 3 5 1 5 9 13 3 6 9 12 ...

  8. 『最长等差数列 线性DP』

    最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...

  9. 51nod 1134 最长递增子序列

    题目链接:51nod 1134 最长递增子序列 #include<cstdio> #include<cstring> #include<algorithm> usi ...

随机推荐

  1. 实用类-<装箱与拆箱>

    装箱:把基本数据类型装换为对应的对象类 作用:1.在需要使用对象类型的时候,装换成对应的对象类型(集合里面) 2.转换完成以后,拥有相应的属性和方法,方便咱们的数据操作 拆箱 Integer intO ...

  2. 「Luogu P3680 凸轮廓线」

    一道神奇的计算几何题 前置芝士 正三角形,正方形,圆:什么,您都会,那真是太好了. 三角函数的运用:因为我不是很想在这一块写太多,具体可以自行百度. 推导公式 对于一串是圆和正方形开头和结尾时是十分好 ...

  3. Solr与tomcat搭建(搭建好)

    https://pan.baidu.com/s/1kXagNYJ  密码:hgxd

  4. Java程序挂掉的几种可能

    今天花了一整天在跟踪一个问题,每次感觉已经快找到原因的时候发现现象又变了,我觉得从中吸取的教训可以给大家分享一下. 为了重现这个现象,我写了一个简单的例子.在本例中,先初始化了一个map,然后用一个无 ...

  5. JavaScript高级程序设计(第3版)每章小结(1-5)

    第一章 JavaScript的简介 第二章 在HTML中使用JavaScript 把JavaScript插入到HTML页面中要使用<Script>元素.使用这个元素可以把JavaScrip ...

  6. centos 访问win共享

    yum install samba 安装samba (其实我们只用到samba里面的winbind以便我们能够用windows机器的名称找到该机器的网络地址,在下面叙述的过程会用到.而且也要确定在 w ...

  7. rar 配合 python 实现 excel密码保护 破解

    基本流程为,将excel 格式 改为rar, 然后用rar软件打开, 将 xl -> worksheet -> sheet*.xml 做下修改, 把sheet*.xml 里面的密码保护字段 ...

  8. Intent的常用属性action和category

    设置隐式跳转 首先在我们按钮监听器中添加 Intent i=new Intent(); //参数为字符串,可以添加包名.活动名 i.setAction("com.example.aaaaa. ...

  9. Linux --xrandr command

    Source: https://www.x.org/archive/current/doc/man/man1/xrandr.1.xhtml https://blog.csdn.net/syh_486_ ...

  10. vbox虚拟机vdi文件用VMware打开

    转自:https://blog.51cto.com/dahui09/1863486 方法一: 使用VirtualBox 自带的VBoxManage来进行格式转换: 1.安装VBoxManage 2.使 ...