数据结构与算法-25活动选择问题

Description
大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。

Input
输入第一行为申请的活动数n(n<100),从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;

Output
输出每天最多能举办的活动数。

Sample Input

12
15 20
15 19
8 18
10 15
4 14
6 12
5 10
2 9
3 8
0 7
3 4
1 3

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题原题:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值