在一个给定的子序列中求一个最长的子序列,该子序列中奇数位置的值大于其前驱值,偶数位置的值小于其前驱值。
#include<string.h>
#include<cstdio>
#include<cstdlib>
using namespace std;
int n;
int h[1010];
int max[1010];
int main()
{
while(scanf("%d",&n),n!=0)
{
int i,j;
int an=1;
for(i=0;i<n;i++)
scanf("%d",&h[i]);
memset(max,0,sizeof(max));
for(i=0;i<n;i++)
{
max[i]=1;
for(j=i-1;j>=0;j--)
{
if(h[i]<h[j]&&max[j]%2==0&&max[j]+1>max[i])
{
max[i]=max[j]+1;
}
if(h[j]>h[i]&&max[j]%2==1&&max[j]+1>max[i])
{
max[i]=max[j]+1;
}
}
if(an<max[i])
an=max[i];
}
printf("%d\n",an);
}
return 0;
}