1、题意:即求最长单调子序列的长度
2、思路:分别求储存上升子序列与下降子序列的长度,输出最大值
3、感想:类似于第一题,只不过再求一次最长下降子序列,输出最大值,几乎一样
4、代码:
#include<bits/stdc++.h>
using namespace std;
int Max(int a,int b)
{if(a>b)return a;
return b;
}
int main()
{
int n,i,j,t,max,k,min,line[1002],a[1002],lin[1002];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);line[0]=lin[0]=0;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
line[1]=lin[1]=1;
for(i=2;i<=n;i++)
{max=0;min=0;
for(j=1;j<i;j++)
{if(a[i]<a[j])
{if(max<line[j]) max=line[j];}
}
for(k=1;k<i;k++)
{if(a[i]>a[k])
{if(min<lin[k]) min=lin[k];}
}
line[i]=max+1;
lin[i]=min+1;}
sort(line,line+n+1);
sort(lin,lin+n+1);
printf("%d\n",Max(lin[n],line[n]));
}
}