您的位置:首页 > 其它

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

2016-03-18 20:40 267 查看

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

//  注意题意,珠子是首尾相连的
//max()函数


#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: