7
1 7 3 5 9 4 8
4
#include<stdio.h>
#include<malloc.h>
struct mm
{
int a;// 输入的值
int b;// 存放长度
}*x;
int main()
{
int n,max,i,j;
while(scanf("%d",&n)!=EOF)
{
x=(mm *)malloc(sizeof(mm)*n);
for(i=0;i<n;i++)
{ // 1 2 2 3 4 3 4
scanf("%d",&x[i].a); // 1 7 3 5 9 4 8
x[i].b=1;//每个数对应长度为一 // 1 1 1 1 1 1 1
}
for(i=0;i<n;i++)
{
for(max=0,j=0;j<i;j++)
{
if(x[i].a>x[j].a&&x[j].b>max)// 找当前数(i)比其前面的数大并对应的最长的长度
{
max=x[j].b;
}
}
x[i].b=max+1;// 前面的最长长度加上本身
}
for(i=0,max=0;i<n;i++)
if(max<x[i].b)max=x[i].b;// 找出最长长度
printf("%d\n",max);
free(x);
}
return 0;
}
原文:http://blog.csdn.net/u014760201/article/details/38109737