最长上升子序列代码c++实现(包括长度和序列输出)

将子序列放在数组a[]中,给每个数一个上升序列的长度编号并存放在一个数组num[]中。

主要代码 if(a[j]num[i])  num[i]=num[j]+1;其中jnum[i],两者同时满足当前就是最大的子序列编号
                   

#include

using namespace std;

int main()
{
    int n,data[10],m;
    int a[20];
    int num[20];
    int maxx=0;
    scanf("%d",&n);
    for(int i=0;i         scanf("%d",&a[i]);
    for(int i=0;i     {
        num[i]=1;
        for(int j=0;j         {
            if(a[j]num[i])
                   num[i]=num[j]+1;
        }
    }
    for(int i=0;i         if(maxx             maxx=num[i];
     printf("最长上升子序列长度:%d\n",maxx);
     for(int j=1;j<=maxx;j++){
         for(int i=0;i              if(num[i]==j){
                 data[j]=a[i];
             }
         }
     }
     cout<<"上升子序列:";
     for(int j=1;j<=maxx;j++){
         cout<      }
     
    
    
    
        
}


 

你可能感兴趣的:(最长上升子序列代码c++实现(包括长度和序列输出))