提交时间:2026-05-26 18:08:21
运行 ID: 441982
#include <iostream> #include <algorithm> using namespace std; const int MAXN = 1005; int a[MAXN]; // 存储数列 int dp[MAXN]; // dp[i] 表示以第i个数结尾的最长上升子序列长度 int main() { int n; cin >> n; // 1. 输入数列 for (int i = 0; i < n; i++) { cin >> a[i]; dp[i] = 1; // 每个数自己就是长度为1的序列 } // 2. 核心:动态规划求 LIS int ans = 1; // 答案至少是1 for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { // 如果前面的数 < 当前数,可以接在后面 if (a[j] < a[i]) { dp[i] = max(dp[i], dp[j] + 1); } } ans = max(ans, dp[i]); // 更新最大值 } // 3. 输出答案 cout << ans << endl; return 0; }