[LibreOJ]P10000 活动安排

https://ajax.loj.ac/problem/10000

活动安排

本题采用贪心的方法:若希望有更多活动可以举行,就要找最早结束的活动。而并不是最早开始的,那样的话反例很容易就可以举出:一个从头到尾超长的活动....

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct time
{
    int s;
    int e;//用结构体储存开始和结束时间。
}t[1001];
bool cmp(struct time a,struct time b)
{
    return a.e<b.e;//比较结束时间
}
int main()
{
    int n,i,cur=0,sum=0,c;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d%d",&t[i].s,&t[i].e);//读入
    sort(t+1,t+n+1,cmp);
    while(1)
    {
        for(i=1;i<=n;i++)
        {
            c=0;//标记的变量
            if(t[i].s>=cur)
            {
                cur=t[i].e;//时间放到举行完活动时
                c++;
                sum++;
                break;
            }
        }
        if(c==0)
            break;//不满足上面那个就说明没有更多时间了
    }
    printf("%d",sum);//输出
    return 0;
}

这个奇怪的OJ是一本通提高的配套OJ.....

posted @ 2018-07-19 13:19  JerryVoider  阅读(200)  评论(0编辑  收藏  举报