经典的题
2025-08-16 16:28:10
发布于:北京
0阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> missiles;
int height;
// 读取输入
while (cin >> height) {
missiles.push_back(height);
}
int n = missiles.size();
if (n == 0) {
cout << "0\n0\n";
return 0;
}
// 第一问:最长不上升子序列长度
vector<int> dp1(n, 1);
int max_len = 1;
for (int i = 1; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (missiles[j] >= missiles[i]) {
dp1[i] = max(dp1[i], dp1[j] + 1);
}
}
max_len = max(max_len, dp1[i]);
}
// 第二问:最少需要的系统数量(等价于最长上升子序列长度)
vector<int> tails;
for (int num : missiles) {
auto it = lower_bound(tails.begin(), tails.end(), num);
if (it == tails.end()) {
tails.push_back(num);
} else {
*it = num;
}
}
int sys_num = tails.size();
cout << max_len << "\n" << sys_num << "\n";
return 0;
}
这里空空如也
有帮助,赞一个