【欲張りアルゴリズムc++】---活動スケジュール

5588 ワード

学校はここ数日にnつの活動があります.これらの活動は学校の大講堂を使っています.同じ時間に講堂は一つの活動にしか使えません.活動時間によっては衝突がありますので、学校の事務室の人たちは活動を放棄して講堂を利用します.
今はホールを使用するnつのイベントを提供します.開始時間はBeginiと終了時間はendiです.
【入力】1行目の整数n(n≦1000);次のn行は、2行目の整数、1行目のbegin、2番目はendi(begin)である.
【出力】最大手配可能な活動個数を出力します.
【入力例】11 3 5 1 4 4 4 12 8 0 6 11 11 5 8 8 8 9 2【出力例】4考え方:簡単な欲張りアルゴリズムは、活動の終了時間が小さい時から大きい時まで並べ替えます.つまり活動の終了時間が早いほどいいです.早く終わったら次の活動の順番を決められます.次の活動の開始時間が前の活動の終了時間より大きいかどうかを判断すればいいです.:
#include
#include
#include
#include
using namespace std;
struct game
{

    int start;
    int theEnd;
} member[1001];
int cmp(game a,game b)
{

    return a.theEnd<b.theEnd;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0; i<n; i++)
        cin>>member[i].start>>member[i].theEnd;
    sort(member,member+n,cmp);
    int cnt = 1;
    int flag = member[0].theEnd;
    for(int i=1; i<n; i++)
    {
        if(member[i].start >= flag)
        {
            cnt++;
            flag = member[i].theEnd;
        }
    }
    cout<<cnt;
    return 0;
}