#include<iostream>
using namespace std;

//method1
/*
利用动态规划来求解。
假设目标数组array[]的前i个元素中,最长递增子序列的长度为LIS[i].那么,
LIS[i]=max{1,LIS[k]+1},array[i+1]>array[k],for any k<=i
时间复杂度为O(N^2)
*/
int findLongest(int* A,int N)
{
    int* LIS=new int[N];
    int max=0;
    for(int i=0;i<N;i++)LIS[i]=1;
       for(int i=0;i<N;i++)
    for(int j=0;j<i;j++)
    {
     if(A[i]>A[j] && LIS[j]+1>LIS[i])
      {
           LIS[i]=LIS[j]+1;
      }
    }
   
     for(int i=0;i<N;i++)
  {
    if(LIS[i]>max)max=LIS[i];
  }
delete [] LIS; return max; } int main() { int N; int* A; while(cin>>N,N) { A=new int[N]; for(int i=0;i<N;i++)cin>>A[i]; int max=findLongest(A,N); cout<<"数组中最长递增子序列长度为:"<<max<<endl; }
delete [] A; system("pause"); return 0; }

  

posted on 2012-11-07 12:35  吉大依恋  阅读(213)  评论(0编辑  收藏  举报