有n个活动,每个活动的开始时间si,结束时间是fi, 这些活动要在一个场地上举行,看如何安排能举办的活动个数最多

文章介绍了如何使用贪心算法来解决在有限场地中安排多个活动的问题。首先按照活动的结束时间对所有活动进行排序,然后从最早结束的活动开始,如果当前活动的开始时间大于等于上一个已选活动的结束时间,则说明它们不冲突,可以添加到解决方案中。这种方法能确保选择到的活动集合是最大的。示例代码展示了具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目: 有n个活动,每个活动的开始时间si,结束时间是fi, 这些活动要在一个场地上举行,看如何安排能举办的活动个数最多。

活动i1234567891011
开始时间130535688212
结束时间4567991011121416

思路:按贪心算法,最早结束的一定用时最短,可以举办更多,先按结束时间从小到大排好序,只要时间不冲突的就可以

activities = [(1,4),(3,5),(0,6),(5,7),(3,9),(5,9),(6,10),(8,11),(8,12),(2,14),(12,16)]      #活动
activities.sort(key=lambda x:x[1])           #按结束时间排序

def activities_select(a):
	res=[a[0]]              #将最新结束的放入列表
	for i in range(1,len(a)):
		if a[i][0]>=res[-1][1]:        #当前节点的开始时间大于等于最后一个入选活动的结束时间就不冲突的,可以加入
			res.append(a[i])
	return res
	
print(activities_select(activities))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

javascript_good

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

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

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

打赏作者

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

抵扣说明:

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

余额充值