有25匹马和一个5个赛道的马场,每场比赛可以决出5匹马的排名,假设每匹马发挥稳定,且不会出现名次相同的情况。问:如果要知道25匹马中跑得最快的马,需要几场比赛?如果需要知道跑得第二快的马,需要几场比赛?第三快的呢?
题目分析
题解
-
递增矩阵解法
首先将25匹马分5组比赛5次,可以得到各组内的排名。将5个第一名再赛一次,就可以知道25匹马中最快的马。将最快的马那组的第二名替换掉第一名,再赛一次,就可以知道第二快的马是谁。
根据赛马的各组名次,可以构建出赛马的递增矩阵,其中每一列代表一个分组,从上至下为从快到慢。
![](https://img2020.cnblogs.com/blog/1169135/202007/1169135-20200718101454598-2127794688.png)
根据该矩阵可以使用贪心算法的思想,很快的选出最快的3匹马。
-
第一快的马
首先可以对第一行的马进行比赛,选出最快的马,就为所有马中最快的马。这里我们假设为左上角的a1。对于第一行的马的比赛,我们假设比赛结果为a1>b1>c1>d1>e1
-
第二快的马
由第一次比赛的结果,可知,第二快的马会在b1和a2中选出,因为b1此时是以其为左上角元素的矩阵的最大值,而a2是其所在列的最大值,因此选两者进行比赛,可以得到结果。
-
第三快的马
-
第二快的马为b1
因此此时对a2、b2、c1进行比较可以得到第三快的马。
-
第二快的马为a2
此时可选的最大值为第一列的a3,以及后四列的最大值b1,所以只要比较a3与b1就可以得到第三快的马。
-
-
总结
第一快需要6场、第二快需要7场、第三块需要8场
参考资料