Description
大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。
Input
输入第一行为申请的活动数n(n<100),从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;
Output
输出每天最多能举办的活动数。
Sample Input
12
15 20
15 19
818
10 15
414
612
510
29
38
07
34
13
Sample Output
5
参考程序(Python语言)
activity=[]
n=int(input())
for i in range(n):
b,e=map(int,input().split())
activity.append([b,e])
activity.sort(key=lambda x:x[1])
last_end=0
res=[]#存储兼容活动信息
for item in activity:
if item[0]>=last_end:
res.append(item)
last_end=item[1]
print(len(res))
分析:本题使用贪心算法,主要思想是按照活动的结束时间(不是开始时间,也不是活动时间的长短)进行排序,然后从前向后逐一安排,若当前活动的开始时间大于或等于上一个活动的结束时间,则可以安排,否则跳过,不安排。
就在3.13日周六,我参加了我的第一次PAT乙级考试,第5题就是类似的活动安排问题,由于我在比赛之前没有复习过算法,平时练的也少,考场上没有做出来那道题,在考场上我就是按照活动的开始时间和活动的持续时间排序的,去两种策略下的最大解,然而就是没考虑按活动的结束时间排序,因而程序只过了部分测试点,由于有两遍排序,也存在超时的问题。归根结底还是自己掌握的不够。衷心建议大家准备PAT考试前还是要复习一下数据结构、算法(数论、贪心这些)多刷刷题,不要只满足于基础语法这个层次QAQ
附上2021.3.13PAT乙级考试第5题原题:
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: