会场安排问题

来源:互联网 发布:图标软件下载 编辑:程序博客网 时间:2024/04/27 22:55

会场安排问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
输入
第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)
输出
对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行


贪心算法:尽量选择比较早结束的活动,腾出会场安排下一场活动
 ////  main.cpp//  会场安排问题//  贪心算法:尽快结束活动,腾出会场给下场活动用//  Created by H@L on 14-6-5.//  Copyright (c) 2014年 Hzw. All rights reserved.//#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef struct ActivityData{    int m_iStart;    int m_iEnd;}ActivityData;bool less_activity(const ActivityData &data1,const ActivityData &data2){    if (data1.m_iEnd < data2.m_iEnd)        return true;    //if(data1.m_iEnd == data2.m_iEnd && data1.m_iStart > data2.m_iStart)    //    return true;    return false;}int main(void){    int n,m;    cin >> m;    while (m--) {        cin >> n;        vector<ActivityData> vActivity;        vActivity.clear();        while (n--) {            ActivityData data;            cin >> data.m_iStart >> data.m_iEnd;            vActivity.push_back(data);        }        //make_heap(vActivity.begin(), vActivity.end(),less_activity);        //sort_heap(vActivity.begin(), vActivity.end(),less_activity);        sort(vActivity.begin(), vActivity.end(), less_activity);        int num = 1;        int iCur =0;        for (int i=0; i < vActivity.size(); i++) {            if(vActivity[i].m_iStart > vActivity[iCur].m_iEnd){                num++;                iCur = i;            }        }        cout << num << endl;    }    return  0;}        


0 0
原创粉丝点击