文章

10

粉丝

224

获赞

12

访问

51.1k

头像
单调递增子序列(不连续)
P1840 南京理工大学机试题
发布于2022年5月28日 09:35
阅读数 4.9k

 思路:动态规划。dp[i]表示以index=i的元素为结尾的单调递增子序列的最大长度。若nums[j]<nums[i],则dp[i]=Max{dp[i],dp[j]+1},否则dp[i]=1。最终结果取最大的dp[i]

#include <bits/stdc++.h>
using namespace std;

int main()
{

    int n;
    while (scanf("%d", &n) != EOF)
    {
        vector<int> nums(n);
        for (int i = 0; i < nums.size(); i++)
            scanf("%d", &nums[i]);
        vector<int> dp(n, 1);
        int maxVal = 1;
        for (int i = 1; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                if (nums[i] > nums[j])
                    dp[i] = max(dp[i], dp[j] + 1);
            }
            maxVal = max(maxVal, dp[i]);
        }
        printf("%d\n", maxVal);
    }
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发