码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1055 最长等差数列

时间:2017-10-01 15:13:22      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:sort   stack   tac   str   ges   中心   class   using   ring   

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

题意:

技术分享

 

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

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<stack>
 7 #include<queue>
 8 #include<cmath>
 9 #include<map>
10 #include<set>
11 using namespace std;
12 typedef long long ll;
13 typedef pair<int,int> pll;
14 const int INF = 0x3f3f3f3f;
15 const int maxn=10000+5;
16 
17 int n;
18 
19 short int dp[maxn][maxn];
20 int a[maxn];
21 
22 int main()
23 {
24     //freopen("in.txt","r",stdin);
25     while(~scanf("%d",&n))
26     {
27         memset(dp,0,sizeof(dp));
28         for(int i=1;i<=n;i++)  scanf("%d",&a[i]);
29         sort(a+1,a+1+n);
30         for(int i=1;i<=n;i++)
31             for(int j=i+1;j<=n;j++)
32             dp[i][j]=2;
33 
34         int ans=2;
35         for(int i=n-1;i>1;i--)
36         {
37             int l=i-1,r=i+1;
38             while(l>0 && r<=n)
39             {
40                 if(a[l]+a[r]>2*a[i])  l--;
41                 else if(a[l]+a[r]<2*a[i])  r++;
42                 else
43                 {
44                     dp[l][i]=dp[i][r]+1;
45                     if(dp[l][i]>ans)  ans=dp[l][i];
46                     l--;r++;
47                 }
48             }
49         }
50         printf("%d\n",ans);
51     }
52     return 0;
53 }

 

51nod 1055 最长等差数列

标签:sort   stack   tac   str   ges   中心   class   using   ring   

原文地址:http://www.cnblogs.com/zyb993963526/p/7617164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!