给定n个活动,已知它们的起止时间,如何选择活动能够使得单个人能够完成最多数量的活动,假设单个人同一个时间只能做单个活动。
例1:考虑下面三个活动,
活动 | 开始时间 | 结束时间 |
---|---|---|
活动1 | 10 | 20 |
活动2 | 12 | 25 |
活动3 | 20 | 30 |
则单人最多可以完成两个活动:1和3
例2:考虑下面六个活动,
活动 | 开始时间 | 结束时间 |
---|---|---|
活动1 | 1 | 2 |
活动2 | 3 | 4 |
活动3 | 0 | 6 |
活动4 | 5 | 7 |
活动5 | 8 | 9 |
活动6 | 5 | 9 |
则最多可以完成四个活动:1,2,4,5
思路是使用贪心方法,首先将活动按照结束时间进行排序,每次都选择结束时间最近的的活动,但要保证当前选择的活动开始时间不早于前一活动的结束时间。
证明:(反证法)
首先将活动安装结束时间排序,假设存在更多的新的活动选择。则某个时间点选择的不是当前可行的最近可以完成的活动,后面的所有可行活动选择都可能被选择,所以新的选择活动总数量不会大于按照结束时间选择的活动总数量。矛盾。