1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int main() { int n = 0; int a[1001]; // 存储输入数组 vector<int> dp; // dp[i] 存储以 a[i] 结尾的最长不上升子序列的长度 vector<int> cc; // cc[i] 存储以 a[i] 结尾的最长上升子序列的长度 // 使用 scanf 读取输入,并确保 n 的准确计数 while (scanf("%d", &a[n]) != EOF) { n++; } if (n == 0) { cout << "0\n0\n"; // 如果没有输入,则输出 0 return 0; } dp.resize(n, 1); cc.resize(n, 1); int maxcnt = 1; // 存储最长不上升子序列的长度 // 计算最长不上升子序列(LNIS) for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (a[i] <= a[j] && dp[i] < dp[j] + 1) { // 更新条件:a[i] <= a[j] dp[i] = dp[j] + 1; } } maxcnt = max(maxcnt, dp[i]); // 更新最大长度 } cout << maxcnt << endl; // 输出最长不上升子序列的长度 maxcnt = 1; // 重置 maxcnt // 计算最长上升子序列(LIS) for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (a[i] >= a[j] && cc[i] < cc[j] + 1) { // 更新条件:a[i] >= a[j] cc[i] = cc[j] + 1; } } maxcnt = max(maxcnt, cc[i]); // 更新最大长度 } cout << maxcnt << endl; // 输出最长上升子序列的长度 return 0; }
- 1
信息
- ID
- 738
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 84
- 已通过
- 13
- 上传者