最多有多少人参加比赛呢?

来源:互联网 发布:天天网络教育会计 编辑:程序博客网 时间:2024/04/20 18:38

已知一次比赛一共有四道题目,每道题目有A,B,C三个选项。当比赛结束之后阅卷人员发现,参赛者中任意三个人,都有一道题目,他们的答案互不相同。那么最多有多少人参加了比赛呢?









        这道题目也颇有趣。我们假设有m个人参加了比赛。那么这些解答可以表示成一个4*m的矩阵,每一列从上到下写上A或B或C,表示那一题该选手选的结果。那么题目就翻译为任意三列,都可以找到一维(一个四行有四维),这三列在这一维互不相同。


        一开始分析到上面,其实只不过把题目翻译了一下,更加直观,但还是没有实质的进展。后来发现,其实每一维之间是相互独立的。我们可以从维度入手,想象成每一维(行)都有一些三人组(三列)赋值不同,就好像这一维把这三个人区别开,如果某一维把某三列区别开,那么之后的其它维就不用管这三列,尽可能地赋值把其他三人组区别开,最终如果能把所有三人组区别开,那么就存在这样的方案。我们发现,m越大,要区分的三人组越多,而维数越多,能够区分的三人组越多,这道组合极值问题题就是在问给了维数之后能够区分多少人构成的三人组。


        我们从简单情况分析,只有一维(也即只有一道题)的时候,显然最多有三个人,他们分别选A,B,C即可(如果四个人,由抽屉原理,有两个人该题选相同,那么再加上任何一个人,这三个人都无法被区别)。我们用f(n)表示维最多能够区分的人数。显然要考虑f(n+1)与f(n)的关系。仍然是抽屉原理,f(n+1)个人,在第一题有一个选项至多有[f(n+1)/3]人选,也就是至少有(f(n+1)-[f(n+1)/3])人,他们一共选了两种选项,这些人无法通过第一维区分,一定要通过下面n维区分。所以(f(n+1)-[f(n+1)/3])<=f(n). 也即f(n+1)*2/3<=f(n), 也即f(n+1)<=f(n)*3/2;


        这样我们就找到了递推式,f(2)<=f(1)*3/2  =>  f(2)<=4  =>f(3)<=6   => f(4)<=9.下面要构造一种9个人的例子:


A A A B B B C C C

A B C A B C A B C

A B C B C A C A B 

A B C C A B B C A


不难验证上述例子满足要求。


















原创粉丝点击