zoukankan      html  css  js  c++  java
  • 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]。
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    js获取数组最大值或最小值
    echarts 在 vue-awesome-swiper中无法点击
    vue 父子父组件通过props传父页面请求后的数据
    vue 路由对象
    popupwindow
    数据库
    冒泡排序
    xtuils
    版本更新
    清除缓存
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/14429306.html
Copyright © 2011-2022 走看看