题目: 有n个活动,每个活动的开始时间si,结束时间是fi, 这些活动要在一个场地上举行,看如何安排能举办的活动个数最多。
| 活动i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 开始时间 | 1 | 3 | 0 | 5 | 3 | 5 | 6 | 8 | 8 | 2 | 12 |
| 结束时间 | 4 | 5 | 6 | 7 | 9 | 9 | 10 | 11 | 12 | 14 | 16 |
思路:按贪心算法,最早结束的一定用时最短,可以举办更多,先按结束时间从小到大排好序,只要时间不冲突的就可以
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))
文章介绍了如何使用贪心算法来解决在有限场地中安排多个活动的问题。首先按照活动的结束时间对所有活动进行排序,然后从最早结束的活动开始,如果当前活动的开始时间大于等于上一个已选活动的结束时间,则说明它们不冲突,可以添加到解决方案中。这种方法能确保选择到的活动集合是最大的。示例代码展示了具体实现过程。

被折叠的 条评论
为什么被折叠?



