SSLZYC 活动安排

题目大意:
我们要在足够多的会场里举行各种活动,一个会场在同一时刻只能安排一个活动,希望使用尽可能少的会场总数。假设一个活动结束后,立即可以在这个会场中进行下一个活动。求一段时间中需要的最少会场数。


思路:
纯暴力的题目!
我们可以以开始时间来快排,再从1到n枚举每个活动的时间,求出最少所需的会场数。
时间复杂度:O(n^2)


代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

int a[1001],b[1001],c[1001],sum,n,num;

void sorts(int l,int r)
{
    int i,j,z;
    i=l;
    j=r;
    z=a[(i+j)/2];
    do
    {
        while (a[i]<z) i++;
        while (a[j]>z) j--;
        if (i<=j)
        {
            swap(a[i],a[j]);
            swap(b[i],b[j]);
            i++;
            j--;
        }
    }
    while (i<=j);
    if (i<r) sorts(i,r);
    if (j>l) sorts(l,j);
}

int main()
{
    freopen("meet.in","r",stdin);
    freopen("meet.out","w",stdout);
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
     scanf("%d%d",&a[i],&b[i]);
    sorts(1,n);  //手打快排 
    sum=1;
    c[1]=b[1];  //初始化 
    for (int i=2;i<=n;i++)  //枚举 
    {
        num=0;
        for (int j=1;j<=sum;j++)
         if (c[j]<=a[i]&&c[j]>c[num]) num=j;
        if (num==0)  //使用已有会场 
        {
            sum++;
            c[sum]=b[i];
        }
        else  //新开一个会场 
        {
            c[num]=b[i];
        }
    }
    printf("%d\n",sum);
    return 0;
}
原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313115.html