周末有n门选修课, 小猴要在n门选修课中选择尽可能多的课程 已知每门课程的开始时间和结束时间, 不能选时间段上有重复的课程.输入格式:第一行是一个整数n(1≤n≤1000) 接下来n行,每行是2个整数a_i,b_i(0≤a_i <b_i≤10的9次方),表示每门课程开始、结束的时间。输出小猴能选的最大课程数量,使用C++做出题目
时间: 2024-02-12 11:05:44 浏览: 70
以下是 C++ 的实现代码:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<pair<int, int>> courses(n);
for (int i = 0; i < n; i++) {
int start, end;
cin >> start >> end;
courses[i] = {start, end};
}
sort(courses.begin(), courses.end(), [](pair<int, int>& a, pair<int, int>& b) {
return a.second < b.second; // 按照结束时间从小到大排序
});
int current_time = 0, count = 0;
for (auto& course : courses) {
if (course.first >= current_time) {
count++;
current_time = course.second;
}
}
cout << count << endl;
return 0;
}
```
时间复杂度为 O(nlogn),其中 n 为课程数量。
阅读全文