hdu1257(最长上升子序列)

作者: 42fighting | 来源:发表于2018-01-23 16:24 被阅读0次

题目链接:kuanbin带你飞基础dp专题:hdu1257
这是一道经典的LIS题目。一句话可以概括这道题目的变形:最长上身子序列的长度等于不下降子序列的个数。然后用dp做的时间复杂度是O(n),可以用二分优化,时间复杂度为O(nlogn)。
ac代码:

#include <bits/stdc++.h>
using namespace std;
int a[1000000], dp[1000000];
int main(void)
{
    int N;
    while(scanf("%d", &N)!=EOF)
    {
        memset(dp, 0, sizeof(dp));
        dp[0]=1;
        for(int i=0; i<N; i++)
        scanf("%d", &a[i]);
        for(int i=0; i<N; i++)
        {
            for(int j=0; j<i; j++)
            {
                if(a[i]>a[j])
                dp[i]=max(dp[i], dp[j]+1);
            }
            if(dp[i]==0)dp[i]=1;
        }
        int M=-1;
        for(int i=0; i<N; i++)M=max(M, dp[i]);
        printf("%d\n", M);
    }
    return 0;
}

相关文章

  • hdu1257(最长上升子序列)

    题目链接:kuanbin带你飞基础dp专题:hdu1257这是一道经典的LIS题目。一句话可以概括这道题目的变形:...

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • LintCode 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问...

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明最长上升子序列的定义:最长上升子序列...

  • 最长上升子序列

    最长上升子序列(Longest Increasing Subsequence) 最长上升子序列方案数

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问...

  • 76. 最长上升子序列

    描述 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子...

  • 76. 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问题是在...

  • lintcode 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问题是在...

  • 子序列问题

    最长公共子序列 最长上升/下降/不升/不降子序列

网友评论

    本文标题:hdu1257(最长上升子序列)

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