#include <cstdio>
int main() {
int a[1000],maxlen[1000]={0};
int *p,*max=maxlen;
int i,j,N;
scanf("%d",&N);
for(i=0;i<N;i++) {
scanf("%d",a+i);
p=maxlen+i;
for(j=0;j<i;j++)
if(a[j]<a[i]&&maxlen[j]>*p)
p=maxlen+j; //求以a[i]为终点的最长上升子序列长度
maxlen[i]=*p+1;
if(maxlen[i]>*max)
max=maxlen+i;
}
printf("%d\n",*max);
return 0;
}
[ACM] Longest increasing subsequence
Speak