• LIS例题


    例一

    求一组数的lis
    f[i]为必选a[i]的lis长度

    class Solution {
    public:
        //low[i]代表长度为i的lis的结尾的最小值
        int LIS(vector<int>& a) {
            int n = a.size();
            int cnt = 0;
            vector<int> low(n + 1), f(n);
            for(int i = 0; i < n; i++) {
                int t = lower_bound(low.begin() + 1, low.begin() + cnt + 1, a[i]) - low.begin();
                f[i] = t;
                cnt = max(cnt, t);
                low[t] = a[i];
            }
            return cnt;
        }
    };
    

    例二circus-tower-lcci

    定义x1<x2&&y1<y2时(x1,y1)<(x2,y2)
    求(x,y)数组的lis

    思路

    第一维排序,第一维相同按第二维降序,求第二维的lis

    例三pile-box-lcci

    上例的三维版本,求合法序列的第三维的最大和

    思路

    按照第一维排序后答案必是排序后数组的子序列,对它用朴素方法dp
    f[i]表示必选第i个时的最大高度
    (f_i=max(f_j)+a_i.third)
    (j<i,a_j<a_j)

  • 相关阅读:
    Android购物商城
    Android简易计算器
    安卓第四周作业
    第一次安卓作业
    十五周课后习题
    第十三周作业
    十三周上机练习
    第十二周作业
    第十二周练习
    11周上机作业(5.14)
  • 原文地址:https://www.cnblogs.com/wrjlinkkkkkk/p/14269376.html
Copyright © 2020-2023  润新知