| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 441980 | 王程之 | 序列(lis) | C++ | 通过 | 100 | 4 MS | 248 KB | 871 | 2026-05-26 16:44:59 |
#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; }