【每日一道智力题】之海盗分金币(上)

简介: 【每日一道智力题】之海盗分金币(上)

文章目录


题目:

5个海盗抢到了100枚金币,每一颗都一样的大小和价值。

他们决定这么分:

抽签决定自己的号码(1,2,3,4,5)

首先,由1号提出分配方案,然后大家5人进行表决,当半数以上的人同意时(不包括半数,这是重点),按照他的提案进行分配,否则将被扔入大海喂鲨鱼。

如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。

依次类推…

假设每一位海盗都足够聪明,并且利益至上,而且遵守承诺,能多分一枚金币绝不少分,那么1号海盗该怎么分金币才能使自己分到最多的金币呢?

解答:

我们从后向前的模拟每个人的思考:

5号:如果1 2 3号都被鲨鱼吃了,那么那100个金币我肯定得了,因为4号无论怎么投票都会被喂鲨鱼。(超过半数)如果没到4号选择,那么我就选给我金币最多的那个人。

4号:因为如果1 2 3号都被鲨鱼吃掉,自己必死无疑,所以我要支持前面的人来活命,并且金币越多越好。

3号:由于知道4号要活命,一定会投我,所以如果1号,2号死了以后,我的分配为(100 0 0),一定可以以2:1获胜。如果没有死,那我就选金币最多的情况。

2号:我可以推理出3号的想法,他一定会阻止我,不过没关系,我只要让后面几个人支持我就行,所以我的分配为(98 0 1 1)就行。这样我就可以以3:2鹰下比赛。

1号:我可以推理出2号的想法,他一定会阻止我,不过没关系,我只要给后面人多一点钱就行,我的分配是:(97 0 1 2 0)或者(97 0 1 0 2)就可以通过3:2赢下比赛。

没错,只要1号并将提出(97,0,1,2,0)或(97,0,1,0,2)的方案,即放弃2号,而给3号一枚金币,同时给4号(或5号)2枚金币。由于1号的这一方案对于3号和4号(或5号)来说,相比2号分配时更优,他们将投1号的赞成票,再加上1号自己的票,1号的方案可获通过,97枚金币可轻松落入囊中。这无疑是1号能够获取最大收益的方案了!答案是:1号强盗分给3号1枚金币,分给4号或5号强盗2枚,自己独得97枚。分配方案可写成(97,0,1,2,0)或(97,0,1,0,2)。

题目变形:

就是只需要一半人同意即可,不需要一半人以上同意方案就可以通过,在其他条件不变的情况下,1号该怎么分配才能获得最多的金币?

解答:

类似的推理过程

4号:4号提出的方案的时候肯定是最终方案,因为不管5号同意不同意都能通过,所以4号5号不必担心自己被投入大海。那此时5号获得的金币为0,4号获得的金币为100。

5号:因为4号提方案的时候 ,自己获取的金币为0 。所以只要4号之前的人分配给自己的金币大于0就同意该方案。

4号:如果3号提的方案一定能获得通过(原因:3号给5号的金币大于0, 5号就同意 因此就能通过),那自己获得的金币就为0,所以只要2号让自己获得的金币大于0就会同意。

3号:因为到了自己提方案的时候可以给5号一金币,自己的方案就能通过,但考虑到2号提方案的时候给4号一个金币,2号的方案就会通过,那自己获得的金币就为0。所以只要1号让自己获得的金币大于0就会同意。

2号:因为到了自己提方案的时候只要给4号一金币,就能获得通过,根本就不用顾及3 号 5号同意不同意,所以不管1号怎么提都不会同意。

1号:2号肯定不会同意。但只要给3号一块金币,5号一块金币(因为5号如果不同意,那么4号分配的时候,他什么都拿不到)就能获得通过。

所以答案是 98,0,1,0,1。

总结

这就是今天的每日一道智力题。以后遇到类似的问题也可用类似的推理,并不难。

建立此专栏的初衷是为了监督自己每天认真学一道题,积少成多。并把自己的收获以博客的形式分享出来,帮助更多人,以及方便后续复习。如果有兴趣的同学可以订阅此专栏,大家一起交流,进步和学习!

专栏:链接: 每日一题

目录
相关文章
|
2月前
|
人工智能 算法 BI
AcWing 505. 火柴排队(每日一题)
AcWing 505. 火柴排队(每日一题)
|
7月前
|
Java
leetcode-452:用最少数量的箭引爆气球
leetcode-452:用最少数量的箭引爆气球
72 0
|
6月前
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
7月前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
43 0
|
算法 Java
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
69 0
L2-028 秀恩爱分得快 (25 分)
L2-028 秀恩爱分得快 (25 分)
161 0
leetcode 1921. 消灭怪物的最大数量(每日一题)
leetcode 1921. 消灭怪物的最大数量(每日一题)
87 0
|
算法
算法题每日一练---第24天:海盗分金币
5 个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。
281 0
算法题每日一练---第24天:海盗分金币
|
C语言
【每日一道智力题】之高楼扔只因蛋
【每日一道智力题】之高楼扔只因蛋
171 0
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
85 0