51nod 1055 最长等差数列

时间:2023-03-09 14:35:58
51nod 1055 最长等差数列

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1055

题意:

51nod 1055 最长等差数列

思路:
先固定一个位置,然后从该中心点出发向两边扫,确实很难想到啊。。。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+; int n; short int dp[maxn][maxn];
int a[maxn]; int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n))
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) scanf("%d",&a[i]);
sort(a+,a++n);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
dp[i][j]=; int ans=;
for(int i=n-;i>;i--)
{
int l=i-,r=i+;
while(l> && r<=n)
{
if(a[l]+a[r]>*a[i]) l--;
else if(a[l]+a[r]<*a[i]) r++;
else
{
dp[l][i]=dp[i][r]+;
if(dp[l][i]>ans) ans=dp[l][i];
l--;r++;
}
}
}
printf("%d\n",ans);
}
return ;
}