问题描述
学校举行了一个运动会,有以下六个项目。有五位同学报名了相应的项目。假设每个项目所用时间均为一个小时。
如何安排各个项目的顺序,使运动会在最短时间内结束。同学的参加的项目顺序可以调换,必须参加自己报的项目。
分析
尽量让更多的项目同时进行,同时保证不冲突。
1 |
|
思考
上面的算法是基于队列的。基于所有项目自前至后(从A到F)地寻找是否冲突,进而划分为组。没有冲突的是一组,有冲突的要在不同的组。
对于第二个用例,有多个解法的结果均为4个小时。上述算法的正确性有待证明,即如何证明所分的组数是最少的组数。
选择何种策略能保证最优?有另一种策略可供参考,首先选择冲突最多的项目,即参加人数最多的项目,接下来选择的项目按照参加人数依次递减。