活动安排问题

有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? 
Input
第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3
1 2
3 4
2 9
Output示例
2
思路:先安开始时间排序,然后利用贪心思想使每个开的房间利用率达到最大即可;这是使用暴力做的,明天提供更加简单的方法;
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct aaa
{
int a;
int b;
}aa[10001];
bool cmp(aaa x,aaa y)
{
    return x.a<y.a;
};
int main()
{
    int n,i,j,count=0,t=0,k,x;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&aa[i].a,&aa[i].b); 
    }
    sort(aa,aa+n,cmp);
    //for(i=0;i<n;i++)
    //cout<<aa[i].a <<aa[i].b;
    while(count<n)
    {
        k=0;
        for(i=0;i<n;i++)
        {
            if(aa[i].b!=0)
            x=i;
            break;
        }
        
            for(j=x;j<n;j++)
    {
        if(aa[j].a>=k&&aa[j].b!=0)
        {
            k=aa[j].b;
            aa[j].b=0;
            count++;
        }
    }
    t++;
    }
printf("%d",t);
    return 0;
} 

 

posted @ 2017-03-17 22:48  一点绝不是微小  阅读(155)  评论(0)    收藏  举报