【問題】
設有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;
}