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

nefu 179 珠子(最长递增子序列问题)

时间:2016-03-18 21:42:48      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

Description

小林有一串珠子,是由很多个大小不同的珠子串联在一起组成的圆环型的,且其中每个珠子的大小可以用int型的整数来表示。小林有一个爱好就是数珠子,他想数那些位置相邻而且大小只相差1的珠子组成单调递增或单调递减的最长串是多长,比如说现在他有5个珠子,大小分别为2 3 4 9 22,那么这串珠子最长的符合要求的串的长度为3,而如果是 3 4 3 9 22 这个的话那么最长的有两条,3 4 和 4 3,但是长度相同答案为2。

Input

数据有多个样例,每个样例的第一行给出一个n(0< n < 10),代表这串珠子的总长度(珠子是圆环型的首尾相连的),接着第二行给出n个数字,代表这n个珠子的大小。

Output

请输出这串珠子中最长的符合要求的子串的长度

Sample Input

5
2 3 4 9 22
5
3 4 9 22 2
5
3 4 3 9 22

Sample Output

3 
3
2
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int data[50],lp_1[50],lp_2[50];
    int n,ans_1,ans_2,ans;
    while(cin>>n)
    {
       lp_1[0]=1;lp_2[0]=1;
       for(int i=0;i<n;i++)
        cin>>data[i];
       for(int i=0;i<n;i++)
        data[i+n]=data[i];
       for(int i=1;i<2*n;i++)
       {
           lp_1[i]=1;
           lp_2[i]=1;
           for(int j=0;j<i;j++)
           {
               if(data[i]-data[j]==1&&lp_1[j]+1>lp_1[i])
               lp_1[i]=lp_1[j]+1;
               if(data[j]-data[i]==1&&lp_2[j]+1>lp_2[i])
               lp_2[i]=lp_2[j]+1;
           }
       }
       ans_1=lp_1[0];
       ans_2=lp_2[0];
       for(int i=1;i<2*n;i++)
       {
           ans_1=max(ans_1,lp_1[i]);
           ans_2=max(ans_2,lp_2[i]);
       }
       //cout<<ans_1<<" "<<ans_2<<endl;
       ans=max(ans_2,ans_1);
       cout<<ans<<endl;
    }
    return 0;
}

 

nefu 179 珠子(最长递增子序列问题)

标签:

原文地址:http://www.cnblogs.com/nefu929831238/p/5293556.html

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