活动选择

简介: 活动选择学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。    现在给出n个活动使用礼堂的起始时间begini和结束时间endi(begini < endi),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。

活动选择
学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。   
现在给出n个活动使用礼堂的起始时间begini和结束时间endi(begini < endi),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。
【输入】 第一行一个整数n(n<=1000);  
接下来的n行,每行两个整数,第一个begini,第二个是endi(begini< endi <=32767)
【输出】 输出最多能安排的活动个数。
【样例输入】
  11
  3 5
  1 4
  12 14
  8 12
  0 6
  8 11
  6 10
  5 7
  3 8
  5 9
  2 13
【样例输出】
   4

分析:

• 算法模型:给n个开区间(begini,endi), 选择尽量多的区间, 使得两两不交。
• 做法: 首先按照end1<=end2<…<=endn的顺序排序,依次考虑各个活动, 如果没有和已经选择的活动冲突, 就选; 否则就不选。
• 正确性: 如果不选end1, 假设第一个选择的是endi,则如果endi和end1不交叉则多选一个end1更划算; 如果交叉则把endi换成end1不影响后续选择。

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct section
 4 {
 5     int id;
 6     int begin;
 7     int end;
 8     int flag;//是否被选中 
 9 };
10 int cmp(const void *a,const void *b);
11 int main()
12 {
13     freopen("act.in","r",stdin);
14     freopen("act.out","w",stdout);
15     struct section a[1005];
16     int n,i,lastEnd;
17     int count=0;
18     
19     scanf("%d",&n);
20     for(i=0;i<n;i++)
21     {
22         scanf("%d%d",&a[i].begin,&a[i].end);
23         a[i].id=i+1;
24         a[i].flag=0;
25     }
26     
27     qsort(a,n,sizeof(struct section),cmp);
28     
29     lastEnd=-1;
30     for(i=0;i<n;i++)
31     {
32         if(a[i].begin>=lastEnd) 
33         {
34             count++;
35             lastEnd=a[i].end;
36             a[i].flag=1;
37         }
38     }
39     /*
40     for(i=0;i<n;i++)
41     {
42         if(a[i].flag=1)
43             printf("%d\n",a[i].id);
44     }*/
45     
46     printf("%d\n",count);
47     return 0;
48 }
49 int cmp(const void *a,const void *b)
50 {
51     int ans= ((struct section *)a)->end -((struct section *)b)->end;
52     if(ans>0) return 1;
53     else if(ans<0) return -1;
54     else return 0;
55 }

 

相关文章
|
4月前
|
算法
|
4月前
|
算法
活动选择问题
活动选择问题“【5月更文挑战第19天】”
141 0
|
弹性计算 双11 数据库
2023阿里云618有活动吗?
阿里云有618优惠活动吗?应该有吧,一个是618年中大促,一个是双十一年终大促,都是阿里云两个大型的优惠活动,大家耐心等待吧。
987 0
2023阿里云618有活动吗?
专题学活动上
数字化对发展的深远影响、把握发展数字经济的目标。蔡进,
|
弹性计算 人工智能 关系型数据库
参与活动后的收获
我使用阿里云的ecs服务器,让自己的每个作品都可以跑上线,特别是一些简单的网页,完成轻松的就部署上来了。非常的好用。未来的展望,希望可以一直玩下去,把自己更多的作品发布上线。也可以在我们的ecs服务器社区分享使用心得,让更多的小白朋友可以更好的加入ecs的大家庭!也期望可以掌握更多的ecs的使用技巧,可以搭建起自己的“知识集群”,为以后工作有更多的机会。 在通过“高校学生在家实践”活动后,我感觉自己提高了自己的专业技能,学会了很多的东西,在遇到自己不会的地方时阿里云的开发者社区给我提供了很好的帮助。渐渐使自己有了独立解决问题的能力,感谢阿里云给了我这次机会。
|
监控 数据挖掘 Serverless
618促销活动监控,你准备好了吗
618要来了,小伙伴是不是都在忙着加班,备战活动呢?特别是活动监控,每次活动领导都一次次催监控数据,搞得人紧张兮兮。 那么,到底活动监控该怎么做呢?就拿上个月我司刚做过的一个小活动举个例子吧。这个活动是一个很简单的全民派福利活动。从5月10日开始到5月31日,用户登录APP后可以领一张优惠券,优惠券在5月内都有效,满400减80呢。
180 0
618促销活动监控,你准备好了吗
|
移动开发 Java C语言
阿里-21天打卡活动总结
阿里-21天打卡活动总结
211 0
阿里-21天打卡活动总结
|
安全 数据安全/隐私保护 Windows
参加阿里云活动
无影云活动
145 1
|
云安全 存储 弹性计算
阿里云新人特惠活动7大亮点解析,看看活动为什么受关注
新人特惠活动是阿里云在2021年推出的一个全新优惠活动,也是继开年采购季之后受关注度最高的一个活动,其中关注度最高的云服务器专区包含了个人企业同享和企业专享两个专区,那么这个活动为什么关注度这么高呢?有哪些亮点呢?下面为大家解析一下阿里云新人特惠活动亮点,帮助用户了解活动亮点、规则以及选择技巧。
阿里云新人特惠活动7大亮点解析,看看活动为什么受关注
如何领取营销活动创建的口令送活动优惠
说明: 本帖是介绍如何领取营销活动创建的口令送活动的优惠券,本帖是正式环境测试,仅供参考!!  1.创建营销活动口令送活动:如何创建营销活动口令送活动 2.在口碑商家中心([url]https://e.
522 12