给定一个无序的整数数组,找到其中最长上升子序列长度。
明确dp含义:dp[i]
表示以nums[i]
这个数结尾的最长递增子序列的长度- 明确选择:假设
dp[0...i-1]
都已经被算出来了,然后问自己:怎么通过这些结果算出dp[i](数学归纳思想)
- 明确 base case:
dp[i]
初始值为 1,因为以nums[i]
结尾的最长递增子序列起码要包含它自己
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 110;
int main() {
int n, A[maxn] = { 0 };
int dp[maxn];
fill(dp, dp + maxn, 1);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> A[i];
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (A[i] > A[j])
dp[i] = max(dp[i], dp[j] + 1);
}
}
int maxd = -1;
for (int i = 0; i < n; i++) {
maxd = max(maxd, dp[i]);
}
cout << maxd;
system("pause");
return 0;
}