一个数的序列bi,当b1<b2<...<bs的时候,称为上升序列。对于给定的一个序列(a1,a2,...,an)可以得到一些上升子序列( ai1,ai2,...,aik),这里1<=i1<i2<...<ik<N。比如对于序列(1.7.3.5.9.4.8)的最长上升子序列为1,3,5,8,长度为4。
题目为求出最长上升子序列的长度。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MAXLEN 1000
int b[MAXLEN+10];
int aMax[MAXLEN+10];
int main(int argc, char *argv[])
{
int N;
int i,j;
int temp;
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&b[i]);
aMax[1]=1;
for(i=2;i<=N;i++){
for(j=1;j<i;j++){
if(b[j]<b[i]&&aMax[j]+1>aMax[i])
aMax[i]=aMax[j]+1;
}
}
int res=-1;
for(i=1;i<=N;i++){
if(res<aMax[i])
res=aMax[i];
}
printf("%d",res);
system("PAUSE");
return 0;
}