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

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

附带的三个假定:

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

输入格式:

输入在一行中给出 2 个正整数 D 和 P(3≤P≤D≤100)。

输出格式:

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

输入样例:

10 7

输出样例:

6

代码:

#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n , m;//砖石数 人数
int main()
{cin>>n>>m;if( m > 3)cout<<n - m / 2 - 1;elsecout<<n-1;
}

分析:

5 个海盗抢到了100颗宝石,每一颗都一样大小且价值连城。他们决定这么分:
(1)抽签决定自己的号码(1~4);
  (2)首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔进大海喂鲨鱼;
  (3)如果1号死后,再由2号提出分配方案,然后剩下的4个人进行表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼;
  (4)依此类推……
  条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
  问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?
答案:1号分配,依次是:97,0,1,0,2; 或者是:97,0,1,2,0。
因为我们要先看4号和5号的反应才行。很显然,如果最后只剩下4和5,这无论4提出怎样的方案,5号都会坚决反对。即使4号提出自己要0,而把100颗钻石都给5,5也不会答应――因为5号愿意看到4号死掉。这样,5号最后顺利得到100颗钻石——因此,4的方案绝对无法获得半数以上通过,如果轮到4号分配,4号只有死,只有死!

由此可见,4号绝对不会允许自己来分。他注定是一个弱者中的弱者,他必须同意3号的任何方案!或者1号2号的合理方案。可见,如果1号2号死掉了,轮到3号分,3号可以说:我自己100颗,4号5号0颗,同意的请举手!这时候,4号为了不死,只好举手,而5号暴跳如雷地反对,但是没有用。因为3个人里面有2个人同意啊,通过率66.7%,大于50%!

由此可见,当轮到3号分配的时候,他自己100颗,4和5都是0。因此,4和5不会允许轮到3来分。如果2号能够给4和5一些利益,他们是会同意的。

比如2的分配方案是:98,0,1,1,那么,3的反对无效。4和5都能得到1,比3号来分配的时候只能得到0要好得多,所以他们不得不同意。

由此看来,2号的最大利益是98。1号要收买2号,是不可能的。在这种情况下,1号可以给4号和5号每人2颗,自己收买他们。这样,2号和3号反对是无效的。因此,1号的一种分配方案是:96,0,0,2,2。

这是不是最佳方案呢?再想一想,1号也可以不给4号和5号各2个,而只需要1个就搞定了3号,因为如果轮到2号来分配,2号是可以不给3号的,3号的得益只有0。所以,能得到1个,3号也该很满意了。所以,最后的解应该是:97,0,1,2,0。

好,再倒推。假设1号提出了97,0,1,0,2的方案,1号自己赞成。2和4反对。3∶2,关键就在于3号和5号会不会反对。假设3号反对,杀掉1号,2号来分配,3自己只能得到0。显然,3号不划算,他不会反对。如果5号反对,轮到2号、3号、4号来分配,5号自己最多只能得到1。

所以,3号和5号与其各得到0和1,还不如现在的1和2。

分析转载原文

进阶实验2-3.1 海盗分赃 (25 分)相关推荐

  1. PTA 7-98 海盗分赃 (25分)

    P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P 个海盗通过抽签决定 1 - P 的序号.然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得 ...

  2. PTA 海盗分赃 (25分)

    P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P 个海盗通过抽签决定 1 - P 的序号.然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得 ...

  3. 7-2 海盗分赃 (25 分)(PTA)

    P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P 个海盗通过抽签决定 1 - P 的序号.然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得 ...

  4. 数据结构PTA习题:进阶实验5-3.2 新浪微博热门话题 (30分)

    进阶实验5-3.2 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到 ...

  5. 【两种解法】基础实验4-2.2 列出叶结点 (25 分)

    立志用最少的代码做最高效的表达 对于给定的二叉树,本题要求你按从上到下.从左到右的顺序输出其所有叶节点. 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数.树中的结点从 0 到 N− ...

  6. 【视频讲解】基础实验4-2.1 树的同构 (25 分)

    立志用最少的代码做最高效的表达 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树 ...

  7. 基础实验 7-2.1 魔法优惠券(25 分)

    在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值 K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的 ...

  8. 详解:海盗分赃(25 分)

    海盗分赃(25 分) P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P 个海盗通过抽签决定 1 - P 的序号.然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的 ...

  9. PTA编程题:海盗分赃(Java) (25 分)

    海盗分赃 (25 分) P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P 个海盗通过抽签决定 1 - P 的序号.然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得 ...

最新文章

  1. Linux那些事儿 之 戏说USB(31)驱动的生命线(三)
  2. 主要的窗体控件的概述
  3. ubuntu如何完全卸载和安装 Java及android环境?【转】
  4. 看了这几幅图,感觉自己物理白学了!
  5. 如何使用VisualVM监视服务器上的多个JVM
  6. 一道面试题目引发的思考
  7. mysql排序加权_mysql多关键词查询相关匹配加权排序
  8. STM32一种基于NTC的控温电路及软件实现
  9. 告别刷抖音!30秒一个Python小例子,总有一款适合你,赶紧收藏!
  10. esp32 例程 蓝牙_wifiamp;蓝牙MCU 该不该选ESP32
  11. 10-ESP8266 SDK开发基础入门篇--上位机通过串口控制ESP8266灯亮灭
  12. 从RCNN到SSD,深度学习目标检测算法盘点
  13. html弄多个按钮_html - 一个表单中的两个提交按钮
  14. ubuntu20 系统 Apache+花生壳(内网穿透)服务项目上线
  15. 计算机病毒的危害与防范
  16. 机房运维——技术文档
  17. VBS教程(入门级)
  18. [转]24个英文电子书免费下载网站
  19. 联想微型计算机不支持xp,联想台式机不能装xp怎么办
  20. Linux下安装网易云音乐

热门文章

  1. samba服务器如何配置
  2. 2017年12月全球数据库排名:SQL Server 跌势明显,刚获阿里投资的MariaDB表现良好
  3. mysqladmin命令用法
  4. C# AssemblyInfo.cs文件的作用
  5. eclipse安装及使用
  6. 百度地图经纬度和像素坐标互转
  7. c语言程序无法打开文件,C语言fopen()总是提示无法正常打开文件
  8. c语言 轮询数据库,select 实现定时 + 轮询
  9. 领域模型-软件需求分析
  10. 电脑安装不了pr提示不满足系统要求怎么办?