题意:有n项工作,每项工作分别在si时间开始,在ti时间结束。对于每项工作,你都可以选择参与与否。如果选择了参与,那么自始至终都必须全程参与。此外,参与工作的时间段不能重合。然后问你的目标是参与尽可能多的工作,那么你最多能参与多少项工作?
思路:这种题目我们很容易想到贪心的方案,但问题的重点是我们该如何执行贪心。我们在可选的工作中,每次选择结束时间最早的工作。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000;
pair<int,int> itv[maxn];
void solve(){
for(int i=0;i<n;i++){
itv.first = t[i];
itv.second = s[i];
}
sort(itv,itv+n);
int ans = 0,t = 0;
for(int i=0;i<n;i++){
if(t < itv.second) ans++,t=itv.first;
}
cout<<ans<<endl;
}