就是翻转某个区间 求最长上升序列长。感觉类似最长上升下降序列,然后判断下就好了。
前边最多就三种情况 1-----1 1-----2 2-----2
后边往前就三种 2------1 2-----2 1-----1
举个例子 1--------1 2--------1 翻转成1--------2 翻转后边就行
1------2 2--------1 从第一个的2到最后翻转 变成1---------2
2------2 1--------1 翻转后边1-------1 变成1--------2
都可以搞成一个递增的序列
其余 算一下都一样的 最后求出来一个最大值就行
int a[2050];
int b[2050];
int c[2050];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
b[0]=1;
for(int i=1;i<n;i++)
{
b[i]=1;
for(int j=0;j<i;j++)
{
if(a[i]>=a[j])
{
b[i]=max(b[i],b[j]+1);
}
}
}
c[n-1]=1;
for(int i=n-1;i>=0;i--)
{
c[i]=1;
for(int k=i+1;k<n;k++)
{
if(a[k]>=a[i])
{
c[i]=max(c[i],c[k]+1);
}
}
}
int ans=1;
for(int i=0;i<n;i++)
{
ans=max(ans,b[i]+c[i+1];
}
printf("%d\n",ans);
return 0;
}