文章
10
粉丝
224
获赞
12
访问
51.1k
思路:动态规划。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;
}
登录后发布评论
暂无评论,来抢沙发