美文网首页
关于最长上升子序列的相关讨论

关于最长上升子序列的相关讨论

作者: 风之旅人c | 来源:发表于2020-03-11 15:24 被阅读0次

    最近,在题目中,遇见了最长不上升子序列的求解,所以,我特地思考了关于上升子序列的4中相关情况的求解。

    最长严格上升子序列

    int LIS(int n)
    {
        int len = 1;
        dp[1] = a[1];
        
        for(int i=2; i<=n; ++i)
        {
            if(a[i] > dp[len])
            {
                
                dp[++len] = a[i];
            }
            else
            {
                int pos = lower_bound(dp, dp+len, a[i]) - dp;
                dp[pos] = a[i];
            }
        }
        return len;
    }
    

    最长不严格上升子序列

    int LIS(int n)
    {
        int len = 1;
        dp[1] = a[1];
        
        for(int i=2; i<=n; ++i)
        {
            if(a[i] > =dp[len])
            {
                
                dp[++len] = a[i];
            }
            else
            {
                int pos = upper_bound(dp, dp+len, a[i]) - dp;
                dp[pos] = a[i];
            }
        }
        return len;
    }
    

    最长严格下降子序列

    int LIS(int n)
    {
        int len = 1;
        dp[1] = a[1];
        
        for(int i=2; i<=n; ++i)
        {
            if(a[i] < dp[len])
            {
                
                dp[++len] = a[i];
            }
            else
            {
                int pos = lower_bound(dp, dp+len, a[i], greater<int>()) - dp;
                dp[pos] = a[i];
            }
        }
        return len;
    }
    

    最长不严格下降子序列

    int LIS(int n)
    {
        int len = 1;
        dp[1] = a[1];
        
        for(int i=2; i<=n; ++i)
        {
            if(a[i] <= dp[len])
            {
                
                dp[++len] = a[i];
            }
            else
            {
                int pos = upper_bound(dp, dp+len, a[i], greater<int>()) - dp;
                dp[pos] = a[i];
            }
        }
        return len;
    }
    

    相关文章

      网友评论

          本文标题:关于最长上升子序列的相关讨论

          本文链接:https://www.haomeiwen.com/subject/yrdcjhtx.html