鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: iamlx331

[已解决]关于分金这题用Python应该怎么解

[复制链接]
发表于 2020-7-30 17:31:18 From FishC Mobile | 显示全部楼层

回帖奖励 +1 鱼币

一种极端的情况:
首先,A 自己只拿一个金币,然后让剩下 4 个人分 99 个金币,那四个人肯定会因为其中一个人的分法不合被推下去(每个人的数量不相等),如此下来,最后就会只剩两个人(A 和另外一个),两个人均分
这么一想应该是 50 个金币……
到底有什么地方需要编程解决我还没想明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-30 17:41:48 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 baige 于 2020-7-30 17:44 编辑

7-100 海盗分赃 (25分)
P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略:

首先,P 个海盗通过抽签决定 1 - P 的序号。然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括 1 号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则 1 号将被投入大海喂鲨鱼;而后依次类似地由第 2 号、第 3 号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,或者只剩下最后一位海盗,其独占所有钻石。请编写一个程序,给出第 1 号海盗的钻石分配方案中自己分得的钻石数量。

附带的三个假定:

“聪明”与“贪婪”假定:每个海盗总能够以本人利益最大化作为行为准则;
“人性化”假定:在能够取得尽量多钻石的情况下,海盗不会故意致同伙于死地;
“无偏见”假定:海盗之间没有个人恩怨,分给其他海盗钻石的次序以小序号优先为原则。
输入格式:
输入在一行中给出 2 个正整数 D 和 P(3≤P≤D≤100)。

输出格式:
输出第 1 号海盗的钻石分配方案中自己分得的钻石数量。

输入样例:
10 7
输出样例:
6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-30 17:45:47 | 显示全部楼层
本帖最后由 baige 于 2020-7-30 17:51 编辑

100 5
答案:97
代码百度就有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-30 17:55:06 | 显示全部楼层

回帖奖励 +1 鱼币

我想躺一把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-30 18:48:04 | 显示全部楼层
李永乐老师有过一个三人分的简短介绍,可以参考这个讲解视频三姬分金
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-30 20:00:29 | 显示全部楼层

回帖奖励 +1 鱼币

这个提出者算不算在投票人数范围内呢?如果算的话:
1.首先考虑两个人的情况。A和B两人,A提出任何方案理论上B都得接受,因为A本人赞同,就算B返回,人数已经大于等于一半人数了,所以A就会给自己100枚金币而B只能拥有一个寂寞。
结果就是:A 100 B 0
2.如果现在有三个人,来了一个C。A和B和C。这个时候,因为B清楚,如果C的方案被否决而被推到海里,那么就回到了第一种情况,B还是屁都没有,在这种情况下,只要C给出的金额超过0,也就是1块钱,B就会无条件支持C。那么C现在的选择就是一毛钱都不给A,然后给B1枚金币,然后自己拿走99块钱。
结果就是:A 0 B 1 C 99
3.这个时候来了第四个人D。他只需要一个人和他统一战线就可以了,这个时候,他只需要给A一块钱就可以有到达半数人支持这个决议,因为回到上一轮协商,他一个金币都不会有,所以只需要给他一个金币就会达到半数
结果就可能是:   A 1 B 0 C 0 D 99
4.这个时候来了第五个人E。 他只需要给上一轮啥都没有的两个人发1块钱就可以稳固这个决定。
结果就是:A 0 B 1 C 1 D 0 E 98

也就是说前一轮一毛钱都没有的,下一轮就会有一块钱。前一轮凡是有钱的,下一轮就会一毛钱都没有,然后新的人获得余下来的全部
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-30 20:13:28 | 显示全部楼层
如果提出者不算在投票人数范围内。如果不算:
1.现在只有A和B两个人。无论A提出什么,B都不会答应,然后B就把A丢进海里,拥有所有的金币。所以第一轮没有所谓的博弈,结局只有一个: A死亡,B拥有全部金币,也就是100枚。
2.现在出现的第三个人C。C和A知道,如果C的方案被推翻,C和A都会被丢进海里,所以这个时候C独吞100枚,A和B屁都没有。但是虽然A屁都没有,还是保护了性命,会接受。
结果就是 A 0 B 0 C 100
3.现在出现了第四的人D. D需要两个人的支持因为他自己不算,所以他需要给一毛钱都没有的A和B 发1个金币,然后C一毛钱都没有。
结果就是 A 1 B 1 C 0  D 98
4.现在出现了第五个人。他需要争取到两个人的支持。理论上D一定会反对他,因为回到上个回合,D收益最大,C只要给出一个金币就会支持他,因为回到上一轮他损失最大,那么这个时候只需要给ABC各一枚金币,就可以保证收益最大。
结果就是A 1 B 1 C1 D0 E 97

总结下来就是除了最开始的两种情况,后面的都是之前的人获得1金币,倒数第二人什么都不会有,最后一个人获得剩下的所有金币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 11:30:34 | 显示全部楼层

回帖奖励 +1 鱼币

条件太少了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-31 18:31:43 | 显示全部楼层
本帖最后由 一抹心尘 于 2020-10-31 18:35 编辑

代码我帮不了你,但是,从理性,逻辑,纳什均衡的角度帮你解决。至少我的逻辑底层是没有问题的。
一艘海盗船上有5名海盗,他们抢来了100枚金币,怎么分好呢?他们定了一个规则:

先以抽签的方式确定每个海盗的分配顺序,分别为1号、2号、3号、4号、5号。

然后1号开始分金币,如果对分配方案不满意,大家可以投反对票,如果有半数或半数以上的人赞成,那么就通过,按这个方案来分配,如果没有,那么提出方案的就得被扔进海里喂鲨鱼,接着轮到下一个分。

如果你是1号海盗,什么样的分配方案可以保证让自己拿到最多的金币?注意这里有个前提,他们都是十分聪明且理性的,如果中间有一个人是无脑的,则任何博弈都不会起作用,因为无脑人难以为自己争取到最大的利益,这就使得他的行动不可预测。

我想如果你跟普通人的第一感觉一样,一定觉得1号是一支下下签,因为无论你说什么,大家都可以不同意,把你丢进海里,接着剩下的人都能多分点,就算你一分钱不要,你的同伴也未必容得下你。

不过,如果你将逆推法好好应用的话,就会发现事情没这么简单,这道题的突破口在哪里?显然要从最后的两名海盗开始算起。

对于4号和5号海盗来说,当船上只剩下他们两人时,就算4号把钱全拿走,5号也已经无能为力,因为他只能投一票反对,最多只是平局。因此,对于3号来说,他只需分给5号1个金币就可以,也就是99,0,1,他可以完全放弃4号的票,因为4号是3号怎么分配都不会同意的,踢走3号他就能拿走全部。
那么对于2号来说,3号的票是不需要争取了,4号和5号的票只要争取一个就行,如果他要争取5号的票,就需要给他2个金币,可是如果只争取4号呢?付出1个就够了,因为4号不同意的话一个都捞不到,于是对于2号来说,最好的分配方案是99,0,1,0。

既然知道了2号的生存策略,那么1号就知道争取谁的票了,2号可以排除,因为有机会拿99个金币的2号,肯定盼着自己喂鲨鱼,1号还需要两票,只需要争取3和5,各给他们1枚金币,而完全不需要给到4号,这样1号就能以3票拿到最多的98个金币。

看起来最不划算的1号,只需要运用逆推法,就可以成为大赢家。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 00:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表