第 1 个人提出的分配方案要满足两个条件,一是得到半数以上的人支持。二是使自己获得最大的利益。为了取得别人的支持需要给他们部分利益,显然这部分利益要超过他们在第 2 个人提出的可接受分配方案中所获得的利益。如果不这样,他们会反对,从而接受第 2 个人提出的方案。
问题变成了求第 2 个人提出的可接受方案。他的方案也要满足上面的两点。 以此类推,问题变成最后一个人提出可接受方案,显然可以提可接受的方案,因为没有人反对,把金币全部分给自己。
下面是他们的方案:
第5个人的方案: 0 , 0 , 0 , 0 , 100 。(不需要别人的支持)
第4个人的方案: 0 , 0 , 0 , 100 , 0 。(不需要别人的支持)
第3个人的方案: 0 , 0 , 99 , 0 , 1 。(第5个人会支持他)
第2个人的方案: 0 , 99 , 0 , 1 , 0 。(第4个人会支持他)
第1个人的方案: 98 , 0 , 1 , 0 , 1 。(第3,5个人会支持他)
从分析中可得,这个问题可以用递归求解,把求n个人的分配问题变成求n-1个人的分配,实现代码如下。
#include
<
vector
>
博客介绍了如何使用递归方法解决一个智力问题:5个强盗要公平地分配100枚金币。通过将问题转化为求解剩余强盗的分配,博主分享了具体的代码实现。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



