题目+比较好的分析: http://t.csdnimg.cn/CUIrS
贪心策略:在每次最先结束的会议后面加入最早要开始的会议
只要有s[i]<f[j],即当前的i活动比前一个活动j开始得早,那么就要为i活动申请会场。所以不用在意说一个活动的开始和结束时间被拆散了。
//贪心策略:在每次最先结束的会议后面加入最早要开始的会议
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int k;
cin>>k;
int s[k+1],f[k+1];
for(int i=1;i<=k;i++) cin>>s[i]>>f[i];
sort(s+1,s+k+1);
sort(f+1,f+k+1);
int j=1; //第一个会议
int cnt=1; //会场 第一个会议相当于自己初始化一个会场
for(int i=2;i<=k;i++)
{
if(s[i]>=f[j]) //会议相容
j++; //j++更新下一个最早的结束点
else if(s[i]<f[j])
cnt++; //申请会场
}
cout<<cnt;
return 0;
}