• 51Nod-1134 最长递增子序列【LIS】


    1134 最长递增子序列

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
    给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)
    例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。
    Input
    第1行:1个数N,N为序列的长度(2 <= N <= 50000)
    第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
    Output
    输出最长递增子序列的长度。
    Input示例
    8
    5
    1
    6
    8
    2
    4
    5
    10
    Output示例
    5

    问题链接1134 最长递增子序列

    问题分析:典型的计算最长递增子序列的问题。

    程序说明:如果采用时间复杂度为O(n*n)的程序,是会出现TLE的。需要使用时间复杂度为O(nlogn)的程序。

    题记:(略)

    参考链接:(略)


    AC的C++程序如下:

    #include <iostream>
    
    using namespace std;
    
    const int N = 50000;
    int stack[N+1], ps;
    
    int main()
    {
        int n, val;
        while(cin >> n) {
            ps = 0;
            for(int i=1; i<=n; i++) {
                cin >> val;
    
                int left=1, right=ps, mid;
                while(left <= right) {
                    mid = (left + right) / 2;
                    if(val > stack[mid])
                        left = mid + 1;
                    else
                        right = mid - 1;
                }
    
                stack[left] = val;
                ps = max(ps, left);
            }
            cout << ps << endl;
        }
    
        return 0;
    }


    TLE的C++程序(计算复杂度为O(n*n))如下:

    #include <iostream>
    
    using namespace std;
    
    const int N = 50000;
    int a[N], dp[N];
    
    int lis(int n)
    {
        int res = 0;
    
        for(int i=0; i<n; i++) {
            dp[i] = 1;
            for(int j=0; j<i; j++)
                if(a[j] < a[i])
                    dp[i] = max(dp[i], dp[j] + 1);
            res = max(res, dp[i]);
        }
        return res;
    }
    
    int main()
    {
        int n;
        while(cin >> n) {
            for(int i=0; i<n; i++)
                cin >> a[i];
    
            cout << lis(n) << endl;
        }
    
        return 0;
    }






  • 相关阅读:
    golang strings.NewReader
    Nginx REWRITE阶段
    golang 条件变量详解
    redis的使用
    Python 高级(二)
    Python 高级
    面向对象(二)
    面向对象(一)
    Web服务器
    网络编程
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563716.html
Copyright © 2020-2023  润新知