【问题】
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在时间区间[si,fi)内占用资源。若区间[si,fi)与区间[sj,fj)不相交,则称活动i与活动j是相容的。也就是说,当fi≤sj或fj≤si时,活动i与活动j相容。选择出由互相兼容的活动组成的最大集合。
【输入】
第一行一个整数n(1≤n≤1000);
接下来的n行,每行两个整数si和fi。【输出】
输出互相兼容的最大活动个数。
【源代码】
#include<bits/stdc++.h>
using namespace std;
const int N = 10005;
struct Node {
int S,F;
}a[N];
bool cmp ( Node u , Node v ){
if( u.F == v.F ){
return u.S < v.S ;
}
return u.F < v.F ;
}
int n ;
int main () {
cin >> n;
for ( int i = 0 ; i < n ; i++ ){
cin >> a[i].S >> a[i].F;
}
sort ( a, a+n, cmp );
int ans = 1 ;
int F = a[0].F;
for ( int i = 1 ; i < n ; i++ ){
if( F <= a[i].S ){
F = a[i].F ;
ans ++ ;
}
}
cout << ans <<endl;
return 0;
}