(纪中)1549. 活动安排(meet)

(File IO): input:meet.in output:meet.out
时间限制: 1000 ms 空间限制: 128000 KB 具体限制


题目描述
我们要在足够多的会场里举行各种活动,一个会场在同一时刻只能安排一个活动,希望使用尽可能少的会场总数。假设一个活动结束后,立即可以在这个会场中进行下一个活动,即如果活动i使用了第 3 3 3个会场,结束时间是 f i fi fi,那么如果另有一个活动j的开始时间是 s j , s j = f i sj,sj=fi sjsj=fi,那么你可以将活动j也放在这个 3 3 3号会场进行。


输入
第一行是活动数 n ( 1 ≤ n ≤ 100 ) n(1≤n≤100) n1n100
以后的n行,每行两个整数,分别表示 n n n个活动的开始时间 s i si si和结束时间 f i ( 1 ≤ i ≤ n ) , s i < f i fi(1≤i≤n),si<fi fi(1in)si<fi。它们都不超过 2000000000 2000000000 2000000000

输出
一个整数,表示需要的最少会场数。


样例输入
4
1 8
2 5
7 15
5 9

样例输出
3


数据范围限制
( 1 ≤ n ≤ 100 ) (1≤n≤100) 1n100


解题思路
枚举, a a a记录开始时间, b b b记录结束时间,如果 a [ i ] > b [ j ] a[i]>b[j] a[i]>b[j]且两场活动的相距时间是最小的就把两个活动相连, a [ i ] a[i] a[i] b [ i ] b[i] b[i]均赋一个较大的值


代码

#include<bits/stdc++.h>
using namespace std;
long long n,a[110],b[110],minn,k,t,ans;
int main()
{
    freopen("meet.in","r",stdin);
    freopen("meet.out","w",stdout);
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        scanf("%lld%lld",&a[i],&b[i]);
    for(int i=1; i<=n; i++)
    {
    	k=0,minn=2000001000;
        for(int j=1; j<=n; j++)
        {
            if(a[i]>=b[j]&&i!=j&&a[i]-b[j]<minn)
            {
                minn=a[i]-b[j];
                t=j;
                k=true;
            }
        }
        if(k==true)
        {
            ans++;
            b[t]=b[i];
            a[i]=2000001000;
            b[i]=2000001000;
        }
    }
    printf("%d",n-ans);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值