#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int Start[100000]; //定义存储开始时间的数组
int End[100000]; //定义存储结束时间的数组
pair<int, int> works[100000]; //用于存储工作的pair数组
int N; //N代表一共有多少项工作
int main() {
int i;
int sum = 0; //代表选取工作的总数
int t = 0; //t代表当前所选工作的结束时间(默认为0)
scanf("%d", &N);
for (i = 0; i < N; i++) {
scanf("%d", &Start[i]); //进行开始时间的赋值
}
for (i = 0; i < N; i++) {
scanf("%d", &End[i]); //进行结束时间的赋值
}
for (i = 0; i < N; i++) {
works[i] = make_pair(End[i], Start[i]); //因为这里贪心策略需要选择结束时间最早的可选工作,又因为pair数对是按照first排序,所以我们让结束时间放在first中,让开始时间放在second中。
}
sort(works, works + N); //在所有的工作中进行结束时间的排序(从小到大,因为我们要选择结束时间最早的可选工作)
for (i = 0; i < N; i++) {
if (t < works[i].second) { //如果所遍历工作的起始时间,比当前所选工作的结束时间大,那么该工作就可选,否则不可选。
sum++; //工作选完之后,选取工作的总数+1
t = works[i].first; //t等于当前所选工作的结束时间
}
}
cout << sum << endl;
}
原文:https://www.cnblogs.com/gao79135/p/14250834.html