代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n); // 存储输入的 n 个非负整数
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<int> dp(n, 1); // dp[i] 存储以 nums[i] 结尾的最长上升子序列的长度
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);
}
}
}
int max_len = 0; // 最长上升子序列的长度
int end_index = 0; // 最长上升子序列的结尾元素的下标
for (int i = 0; i < n; i++) {
if (dp[i] > max_len) {
max_len = dp[i];
end_index = i;
}
}
cout << max_len << endl;
vector<int> result; // 任意一个最长上升子序列
result.push_back(nums[end_index]);
for (int i = end_index - 1; i >= 0; i--) {
if (dp[i] == dp[end_index] - 1 && nums[i] < nums[end_index]) {
result.push_back(nums[i]);
end_index = i;
}
}
for (int i = result.size() - 1; i >= 0; i--) {
cout << result[i] << " ";
}
cout << endl;
return 0;
}
图解: