hdu1257(最长上升子序列)

题目链接: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;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 算法简述 最长上升子序列(Longest Increasing Subsequence, 简称LIS)是dp中比较...
    xiaoshua阅读 7,315评论 0 5
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,793评论 0 33
  • 对于下面一个序列: 2,1,5,3,6,4,8,9,7 求其最长递增子序列(可以不连续但顺序不可变) 解法一:动态...
    LamyGoGoGo阅读 1,250评论 0 0
  • 归去来兮。 1.1 说明 本篇为《挑战程序设计竞赛(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy阅读 14,543评论 0 160
  • 1. 白色 侧脸侧身 脸放中间不胖 最中间不变形 2.偏时尚 服装十画妆 露背海岛。小碎花大自然 3/4一脸 把人...
    小溪01号家庭陪伴师阅读 273评论 0 0