T1422 活動安排(信息學奧賽一本通)

【問題】

設有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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章