• 最长上升子序列


    #include<iostream>
    using namespace std;
    #define MAX_N 100
    int N;
    int b[MAX_N + 10];
    int aMaxLen[MAX_N + 10];
    int r[MAX_N + 10];//记录路径
    /*
    7
    1 7 3 5 9 4 8

    4
    */

    //递归打印
    void print_path(int index)
    {
         if(aMaxLen[index]>1)
         {
             print_path(r[index]);
             printf("%d ", b[index]);   
         }
         else
         {
             printf("%d ", b[index]);
         }
        
                    
    }

    int main()
    {
         int m;
         scanf("%d", &N);
         for( int i = 1; i <= N; i ++ )
             scanf("%d", &b[i]);
        
         aMaxLen[1]=1;
         for(int i=2;i<=N;i++)
         {
             int tmp=0;
             for(int j=1;j<=i-1;j++)
                 if(b[i]>b[j])
                 {
                     if(aMaxLen[j]>tmp)
                     {
                         tmp=aMaxLen[j];
                         r[i]=j;
                     }
                 }
             aMaxLen[i]=tmp+1;
         }

        int nMax=0;
         int index=0;
         for(int i=1;i<=N;i++)
         {
             if(aMaxLen[i]>nMax)
             {
                 nMax=aMaxLen[i];
                 index=i;
             }
                
         }
         printf("%d ", nMax);
         printf("%d ", index);
         //print_path
         for(int i=1;i<=N;i++)
         {
             printf("%d ", r[i]);
         }
         printf(" ");
         print_path(index);

        return 0;
    }


    http://poj.org/problem?id=3903

  • 相关阅读:
    剑指 Offer 51. 数组中的逆序对
    剑指 Offer 68
    剑指 Offer 68
    JS绑定事件三种方式
    图片懒加载原理及实现
    资源加载过程
    了解JS单线程和任务队列!
    JS函数作用域提升
    JS函数种类详解
    ES6之模版字符串
  • 原文地址:https://www.cnblogs.com/cute/p/15266581.html
Copyright © 2020-2023  润新知