#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 550;
int ind[maxn][2],ded[maxn][2],a[maxn],yu[maxn],pre[maxn];
int n;
int main()
{
while(scanf("%d",&n)==1 && n){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=n;i>=1;i--){
ind[i][0]=ind[i][1]=1;
for(int j=i+1;j<=n;j++){
if(a[i] < a[j]){
ind[i][0] = max(ind[i][0],ind[j][1]+1);
ind[i][1] = max(ind[i][1],ind[j][1]+1);
}
else if(a[i]==a[j]){
ind[i][1] = max(ind[i][1],ind[j][1]+1);
}
}
}
for(int i=n;i>=1;i--){
ded[i][0]=ded[i][1]=1;
for(int j=i+1;j<=n;j++){
if(a[i] > a[j]){
ded[i][0] = max(ded[i][0],ded[j][1]+1);
ded[i][1] = max(ded[i][1],ded[j][1]+1);
}
else if(a[i]==a[j]){
ded[i][1] = max(ded[i][1],ded[j][1]+1);
}
}
}
int res = 0;
for(int i=1;i<=n;i++){
res = max(res,ind[i][1]+ded[i][0]-1);
res = max(res,ind[i][0]+ded[i][1]-1);
}
printf("%d\n",res);
}
}
UVA - 12002(特殊的LIS和LDS组合)
最新推荐文章于 2020-12-30 13:06:06 发布