题目: 有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))