Files
suanfa/public/py/ch4/huodong/activity_selection.py
T

31 lines
798 B
Python
Raw Normal View History

2026-06-16 09:35:51 +08:00
"""
活动选择问题 — 贪心算法
选择最多的不重叠活动
"""
def activity_selection(start, finish):
"""贪心选择最早结束的活动"""
n = len(start)
# 按结束时间排序
activities = sorted(zip(start, finish), key=lambda x: x[1])
selected = [activities[0]]
last_finish = activities[0][1]
for i in range(1, n):
if activities[i][0] >= last_finish:
selected.append(activities[i])
last_finish = activities[i][1]
return selected
if __name__ == "__main__":
start = [1, 3, 0, 5, 8, 5]
finish = [2, 4, 6, 7, 9, 9]
result = activity_selection(start, finish)
print("选择的活动 (开始, 结束):")
for s, f in result:
print(f" [{s}, {f})")
print(f"{len(result)} 个活动")