侧边栏壁纸
博主头像
微尘 博主等级

行动起来,活在当下

  • 累计撰写 132 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

最长上升子序列

Administrator
2023-03-12 / 0 评论 / 0 点赞 / 14 阅读 / 0 字

题目

给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。
第一行包含整数 N
第二行包含 N 个整数,表示完整序列。

原题链接

介绍

  • f[i]代表的就是以i为结尾的最长上升子序列的长度,每遍历到一个数i的时候就要遍历j(从1到i-1的数),如果a[i] > a[j]说明可以组成上升子序列,然后dp[i]=max(dp[i], dp[j] + 1)
  • 注意一开始要将dp[i]初始为1,只有自己本身的长度。

源代码

#include <bits/stdc++.h>

using namespace std;

const int N = 1010;

int dp[N], a[N];

int main()
{
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i ++ ) cin >> a[i];
    
    for (int i = 1; i <= n; i ++ )
    {
        dp[i] = 1;
        for (int j = 1; j < i; j ++ )
        {
            if (a[i] > a[j]) dp[i] = max(dp[i], dp[j] + 1);
        }
    }
    
    int res = 0;
    for (int i = 1; i <= n; i ++ ) res = max(res, dp[i]);
    
    cout << res << endl;
    
    return 0;
}
0

评论区