最长上升子序列
#include<stdio.h>
#include<string.h>
int main() //1299 最长上升子序列的长度
{ int n,m,i,k,nMax,a[1010], MaxLen[1010];
//m存放以ak为终点最长上升子序列长度的最大值
scanf("%d",&n); //输入序列长度n
for(i=1; i<=n; i++)
scanf("%d",&a[i]); //输入n个整数a[i]
MaxLen[1]=1; //初始化以第一个数为
//终点的最长上升子序列长度1
for(k=2; k<=n; k++) //求以ak为终点的
{ m=0; //最长上升子序列长度
for(i=1; i<k; i++) //循环用ak与左边ai比较
if(a[k] > a[i] && m<MaxLen[i])
{
m=MaxLen[i];
}
MaxLen[k]=m+1;
}
nMax = -1; //初始化nMax
//求以ak为终点最长上升子序列最大长度
for(i=1; i<=n; i++)
if(nMax < MaxLen[i])
nMax = MaxLen[i];
//输出最大长度
printf("%d\n",nMax);
return 0;
}