【NOJ1205】【算法实验四】活动安排

1205.活动安排

时限:1000ms 内存限制:10000K 总时限:3000ms

描述

Jack是一名nwpu的大一新生,对学校举办的各种活动都十分的好奇,想尽可能多的参加这些活动。Npwu每天共有N项活动,其开始结束时间分别为B[i],E[i],(i = 1,2,……N)
请问Jack一天最多能参加几项活动。当然,Jack在同一时间内只能参加一项活动,即jack参加的活动时间上不能重叠,但时间为[t1,t2],[t2,t3]的两个活动是可以同时参加的。

输入

第一行 一个整数N(1<=n<=1000)表示活动总数。
接下来N行表示各活动的起始,结束时间0<=B[i]<E[i]<24

输出

一个整数表示Jack最多能参加的活动数目。

输入样例

4
10 11
2 3
8 10
0 2

输出样例

4

#include <iostream>
 
using namespace std;
 
//贪心算法
 
int n;
int b[1001];
int e[1001];
 
int endcur; //当前已参加活动的结束时间,简称当前结束时间
int cnt;    //当前已参加活动的数目
 
int main()
{
    
    
    //输入数据
    cin>>n;
    for(int i=0; i<n; i++)
    {
    
    
        cin>>b[i]>>e[i];
    }
    //按结束时间递增排序
    for(int i=0; i<n; i++)
    {
    
    
        for(int j=i; j<n; j++)
        {
    
    
            if(e[j]<e[i])
            {
    
    
                swap(e[i],e[j]);
                swap(b[i],b[j]);
            }
        }
    }
 
    //贪心算法,按结束时间递增顺序遍历所有活动
    //只要能参加的都参加
    endcur=e[0];    //先参加第一个活动
    cnt=1;
    for(int i=1; i<n; i++)
    {
    
    
        if(b[i]>=endcur) //如果第i个活动开始时间,比当前结束时间晚/相同
        {
    
    
            cnt++;          //这个活动可以参加
            endcur=e[i];    //更新一下当前结束时间
        }
    }
    cout<<cnt<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45619006/article/details/110211646