一、题意
有一个会议室,同一时间只能用来开一次会。
输入若干会议时间区间,输出这个会议室最多能安排多少场会议。
二、解析
经典的区间不相交问题。
由贪心思想:我们希望选出一个区间后,能留下来更长一些的时间长度(这样才有可能选出更多的区间),因此我们按照时间区间的结束点进行从小到大排序,总是先选取最先完成的会议。
三、代码
#include <iostream>
#include <vector>
#include <algorithm>
#define mp make_pair
using namespace std;
int kase;
vector<pair<int, int> > vec;
int main() {
cin >> kase;
while(kase --) {
int x, y;
vec.clear();
while(cin >> x >> y && (x || y)) vec.push_back(mp(x, y));
sort(vec.begin(), vec.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
return a.second < b.second;
});
int ans = 0, cur = 0;
for(const auto & p : vec) if(p.first >= cur) ans ++, cur = p.second;
cout << ans << endl;
}
}四、归纳
- 区间问题之区间不相交问题:按右端点排列,然后总是先选取最先完成的时间区间。

京公网安备 11010502036488号