查找最长有序数列
9
View Code
1 /*解题方法 2 0 1 2 3 4 5 6 7 8 3 a[i] 1 4 7 2 5 8 3 6 9 4 c[i] 1 2 3 2 3 4 3 4 5 5 */ 6 #include<stdio.h> 7 int main() 8 { 9 int a[1000],b[1000],c[1000],i,j,k,n,x,max1,max2; 10 while(scanf("%d",&n),n!=0) 11 { 12 for(i=0;i<n;i++) 13 { 14 scanf("%d",&a[i]); 15 } 16 b[0]=1;c[0]=1; 17 for(i=1;i<n;i++) 18 { k=1; 19 for(j=0;j<i;j++) 20 { 21 if(a[i]>a[j]) 22 { 23 b[k++]=c[j]+1;//记下比a[i]小的数的最长有序数列加1 24 } 25 } 26 max1=b[0]; 27 for(x=0;x<k;x++) 28 { 29 if(max1<b[x])//查找最大的最长有序数列 30 max1=b[x]; 31 } 32 c[i]=max1;//将最大的最长有序数列赋给c[i] 33 } 34 for(i=0;i<n;i++) 35 { 36 if(max2<c[i])//找出最长的有序数列 37 max2=c[i]; 38 } 39 printf("%d\n",max2); 40 } 41 return 0; 42 }
1 4 7 2 5 8 3 6 9
5