导弹拦截
2026-01-22 23:28:02
发布于:浙江
0阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> heights;
int x;
while (cin >> x) {
heights.push_back(x);
}
int n = heights.size();
// 方法1:最长非递增子序列(第一问)
vector<int> dp1(n, 1); // dp1[i] 表示以 heights[i] 结尾的最长非递增子序列长度
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (heights[j] >= heights[i]) { // 非递增:前面的 >= 当前的
dp1[i] = max(dp1[i], dp1[j] + 1);
}
}
}
int max_intercept = *max_element(dp1.begin(), dp1.end());
// 方法2:最长递增子序列(第二问)
vector<int> dp2(n, 1); // dp2[i] 表示以 heights[i] 结尾的最长递增子序列长度
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (heights[j] < heights[i]) { // 严格递增
dp2[i] = max(dp2[i], dp2[j] + 1);
}
}
}
int min_systems = *max_element(dp2.begin(), dp2.end());
cout << max_intercept << endl;
cout << min_systems << endl;
return 0;
}
这里空空如也

有帮助,赞一个