Run ID:136251
提交时间:2025-11-09 22:41:31
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> heights; int height; // 读取输入 while (cin >> height) { heights.push_back(height); } int n = heights.size(); if (n == 0) { cout << "0" << endl; return 0; } // 动态规划求最长不增子序列 vector<int> dp(n, 1); int maxLDS = 1; for (int i = 1; i < n; ++i) { for (int j = 0; j < i; ++j) { if (heights[j] >= heights[i]) { dp[i] = max(dp[i], dp[j] + 1); } } maxLDS = max(maxLDS, dp[i]); } // 贪心算法求最少需要的拦截系统数量 vector<int> systems; for (int i = 0; i < n; ++i) { bool found = false; for (int j = 0; j < systems.size(); ++j) { if (systems[j] >= heights[i]) { systems[j] = heights[i]; found = true; break; } } if (!found) { systems.push_back(heights[i]); } } // 输出结果 cout << systems.size() << endl; return 0; }