最长上升序列II
有N个数放在一个圆周上,可以从任意一个位置开始按照顺时针方向访问数据一圈,沿途可以挑选一些数,要求这些数是上升的(一个比一个大)。问最多能选多少个数?
输入格式
第一行:1个整数N,范围在[1, 100]。
第二行有N个整数,每个数范围在[1, 1000000] 。
输出格式
最多挑选的个数。
输入/输出例子1
输入:
8
2 9 3 5 6 7 1 5
输出:
6
样例解释:
代码:
#include<bits/stdc++.h>
using namespace std;
const int oo=10000000;
int n,s[101],d[101],f[101],ans,maxAns;
int main(){
cin>>n;
for(int i = 1;i <= n;i++)
cin>>s[i];
maxAns=0;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
int sj = i+j-1;
if(sj>n)sj-=n;
d[j]=s[sj];
}
for(int i = 1;i <= n;i++)
f[i]=1;
f[0]=0;d[0]=-oo;
for(int i = 1;i <= n;i++)
for(int j = 0;j < i;j++)
if(d[j]<d[i]&&f[j]+1>f[i])
f[i]=f[j]+1;
ans=0;
for(int i = 1;i <= n;i++)
ans = max(ans,f[i]);
if(ans>maxAns)maxAns=ans;
}
cout<<maxAns;
return 0;
}