贪心算法---礼堂的安排

贪心算法---礼堂的安排

学校在最近几天有若干个活动,这些活动都需要使用学校的大礼堂,但是在同一时间,礼堂只能被一个活动所使用。现在给出n个活动使用礼堂的起始时间和终止时间,请帮助办公室人员找出一个活动的安排方案,使得安排的活动尽量多。

输入:

第一行一个整数n
接下来的n行,每行两个整数,第一个是起始时间,第二个是终止时间。

输出:

最多能够安排的活动的个数。

样例输入:

11

3 5

1 4

12 14

8 12

0 6

8 11

6 10

5 7

3 8

5 9

2 13

样例输出

4

思路分析

首先将各个活动按照结束时间进行排序。第一个结束的活动必选。然后依次考虑剩下的各个活动,如果该活动的开始时间小于上一个活动的结束时间,则不选;
否则,将活动方案数加一。

代码实现

#include <iostream>
using namespace std;
int n,begin_time[1001],end_time[1001];
void init()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
        cin >> begin_time[i] >> end_time[i];
}
void qsort(int low,int high)
{
    int i = low,j = high;
    int t = 0;
    int mid = end_time[(low+high)/2];
    while(i <= j)
    {
        while(end_time[i] < mid)
            i++;
        while(end_time[j] > mid)
            j--;
        if(i <= j)
        {
            t = end_time[j];
            end_time[j] = end_time[i];
            end_time[i] = t;
            t = begin_time[i];
            begin_time[i] = begin_time[j];
            begin_time[j] = t;
            i++,j--;
        }
    }
    if(low < j)
        qsort(low,j);
    if(i < high)
        qsort(i,high);
}
void solve()
{
    int ans = 0,t;
    for(int i = 1,t = -1;i <= n;i++)
    {
        if(begin_time[i] > t)
        {
            ans++;
            t = end_time[i];
        }
    }
    cout << ans << endl;
}
int main()
{
    init();
    qsort(1,n);
    solve();
    return 0;
}
    原文作者:贪心算法
    原文地址: https://blog.csdn.net/tamarous/article/details/48215933
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞