会场安排问题描述

会场安排问题描述

== 会场安排问题描述 ==
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。
小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,
他想尽可能的安排更多的活动,请问他该如何安排。

== 输入 ==
第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)

== 输出 ==
对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行

== 样例输入 ==
2
2
1 10
10 11
3
1 10
10 11
11 20

样例输出
1
2

分析
  1. 活动安排问题, 活动尽可能多,

  2. 一个活动有两个属性,开始时间结束时间,考虑用结构体进行排序(是不是谈贪也可以解决,应该有很多解决办法)

    //结构体的表示方式
    struct Time{
    	int bi,ei;
    }time[10010];
    
  3. 调用sort排序头文件algorithm

  4. 思路按照活动结束时间排序,从第一个活动开始排查,前一个活动的结束时间为当前活动可以的开始时间,判断下一个活动是否可以开始。因此需要有一个变量记录当前最早开始时间,还要一个变量记录最多的活动时间

  5. 问题一bool comp(Time &a,Time &b)错误,不写&,写了以后DevC++运行不出来,虽然codeblock可以运行出来。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct Time{
    	int bi,ei;
    }time[10010]; //Time是数组类型,time具体化
    bool comp(Time a,Time b){
    	return a.ei<b.ei;
    } //自定义按照结束时间比较的函数
    int main(){
    	int m,n;
    	cin>>m;
        while(m--){
            while(cin>>n&&n!=0){
    			int num=0,now=0;
    			for(int i=0;i<n;i++){
    			scanf("%d%d",&time[i].bi,&time[i].ei);
    			//scanf("d%",&time[i].bi);
    			//scanf("%d",&time[i].ei);
    			//我这里不知道为什么换成scanf就不对了
    			//cin>>time[i].bi>>time[i].ei;
    			}
    			sort(time,time+n,comp);
    			for(int j=0;j<n;j++){
    				if(time[j].bi>=now){
    					num++;
    					now=time[j].ei;
    				}
    			}
    			cout<<num<<endl;
       	}
        }
    	return 0;
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值