#include<bits/stdc++.h>
using namespace std;
/*
问题描述
有n项工作,每项工作分别在si开始ti结束。对于每项工作,
你都可以选择参与与否。如果选择参与,则这段时间不可以
干其他工作,尽可能的完成多的工作,那么最多能参与多少
项工作
输入
n = 5
s = {1,2,4,6,8}
t = {3,5,7,9,10}
输出
3
最佳思路:在可选的工作中,每次都选取结束最早的工作
*/
int n;
int s[10000],t[10000];
pair<int,int>itv[10000];
//pair是将2个数据组合成一组数据
//pair的实现是一个结构体,主要的两个成员变量first和second,
//分别存储两个数据, 因为是使用struct不是class,所以可以直接使用pair的成员变量。
void solve(){
sort(itv,itv+n); //根据结束时间排序
int ans=0,t=0;
for(int i=0;i<n;i++){
if(t<itv[i].second){ //t<开始时间
ans++;
t=itv[i].first; //加上结束时间
}
}
cout <<ans<<endl;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i]>>t[i];
itv[i].first=t[i];//结束时间
itv[i].second=s[i]; //开始时间
}
solve();
return 0;
}
区间问题
最新推荐文章于 2023-01-02 19:08:26 发布