最长上升子序列问题,dp[i]表示以第i个数结尾的上升子序列长度。
那么dp[j] = max{dp[i] + 1},只要a[j] > a[i],i < j
根据dp数组的定义,整个数组都初始化为1
最后找出dp数组的最大值即可
代码如下:
#include<iostream>
using namespace std;
int a[1010], dp[1010];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
dp[i] = 1;
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
if (a[j] < a[i] && dp[i] < dp[j] + 1)
dp[i] = dp[j] + 1;
}
}
int ans = dp[1];
for (int i = 2; i <= n; i++)
if (ans < dp[i])
ans = dp[i];
cout << ans << endl;
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-671301.html