• LIS优化


    原dp[i]代表以i结尾的LIS的长度

    现在dp[i]代表长度为i的LIS的最小元素

    dp一定为一个递增数组

    遍历a,当a[i]比当前LIS的最后一个数字还大,则长度++

    否则就二分查找dp数组中第一个>=a[i]的数值,并把它改为a[i]

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10010, INF = 0x7fffffff;
    int a[maxn], dp[maxn];
    int main()
    {
        memset(dp, 0x7f, sizeof(dp));
        int n, k = 0;
        cin >> n;
        for(int i = 0; i < n; i++)
        {
            if(a[i] > dp[k]) dp[++k] = a[i];
            else *lower_bound(dp, dp + k, a[i]) = a[i];
        }
        cout << k << endl;
        return 0;
    }
    • 当a[i]比当前最长的序列的最后一个数字还大,那么长度++;
    • 否则就二分查找dp数组中第一个>=a[i]的数值,并把它改为a[i]。
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    模型评估方法
    欠拟合、过拟合、偏差、方差
    机器学习基本概念
    Hive 的基本概念
    Flume的Channel
    Flume的Sink
    Flume的Source
    Flume 安装和配置
    Flume的基本概念
    BIO & NIO & NIO常见框架
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/14429306.html
Copyright © 2020-2023  润新知