标签:
小林有一串珠子,是由很多个大小不同的珠子串联在一起组成的圆环型的,且其中每个珠子的大小可以用int型的整数来表示。小林有一个爱好就是数珠子,他想数那些位置相邻而且大小只相差1的珠子组成单调递增或单调递减的最长串是多长,比如说现在他有5个珠子,大小分别为2 3 4 9 22,那么这串珠子最长的符合要求的串的长度为3,而如果是 3 4 3 9 22 这个的话那么最长的有两条,3 4 和 4 3,但是长度相同答案为2。
数据有多个样例,每个样例的第一行给出一个n(0< n < 10),代表这串珠子的总长度(珠子是圆环型的首尾相连的),接着第二行给出n个数字,代表这n个珠子的大小。
请输出这串珠子中最长的符合要求的子串的长度
5 2 3 4 9 22 5 3 4 9 22 2 5 3 4 3 9 22
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; }
标签:
原文地址:http://www.cnblogs.com/nefu929831238/p/5293556.html