博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1538 A Puzzle for Pirates(海盗分金问题)
阅读量:6366 次
发布时间:2019-06-23

本文共 1232 字,大约阅读时间需要 4 分钟。

题目链接:

题意:有n个海盗,分m块金子,从第n个海盗开始,依次提出自己的分配方案,如果50%以上的人赞成,则方案通过,开始分金子,如果不通过,则把提出方案的扔到海里,下一个人继续。问编号为p的人最多分得多少金子?

思路:以下是cxlove的思路:如果只有两个人的话那么2号开始提出方案,这时候2号知道不管提什么,他自己肯定赞成,过半数,方案通过,那么2号肯定把所有的金子都给了自己。如果只有三个人的话:那么3号知道,如果自己死了,那么2号肯定能把所有金子拿下,对于1号来说没有半点好处。那么他就拿出1个金子贿赂1号,1号拿到1个金子,总比没有好,肯定赞成3号,剩下的金子3号拿下。如果只有四个人的话:那么4号知道,如果自己死了,那么1号拿到1个金子,2号什么都没有,3号拿下剩下的金子。那他就可以拿出1个金子贿赂2号,2号知道如果4号死了,自己将什么都没有,他肯定赞成4号,4号拿下剩下的全部金子。如此类推下去,貌似就是第一个决策的时候,与他奇偶性相同的人会被贿赂拿到1个金子,剩下的全归提出方案的人所有。但是会有一个问题便是,如果金子不够贿赂怎么办?

(1)如果n<=2*m时候,前面与n相同奇偶性的得到1个金子,剩下的第n个人拿下。

(2)如果n==2*m+1,第n个人拿出m个金子贿赂前面的m个人。自己不拿金子,这样刚好保证自己不死;
(3)如果n>2*m+1,我们可以得到,编号为m*2+2^i的人可以不死且拿不到一个金子。假设有500个海盗,只有100个金子,那么前面201个已经分析过了。对于202号来说,自己不能拿金币,而贿赂上一轮没有拿到金币的101人中的100人就够了。对于203号来说,需要102个人的支持,显然加上他自己,还需要101票,而金子不够贿赂,别人会反对,而达到杀人的目的。对于204号来说,他知道一旦自己死了,203号是必死,抓住这点,203必然支持他,因为203号宁可不要金币,也要保住性命,所以204号把100个金币分给之前的100个人,然后203和他自己的两票保证自己不死。对于205号来说,203和204是不会支持他的,因为一旦205死了,他们不仅可以保住性命,而且还可以看着205死掉。所以205是必死。那么206呢,虽然205必死,会支持他,但是还是缺一票,所以必死。对于207呢,205和206之前是必死,会支持他,但是加上自己以及100个贿赂名额,还是必死。对于208号,205,206,207是必死的,肯定会支持208成功,那么208刚好能凑齐104票,得以保命。
 
int n,m,p;void deal(){    int i,temp=n-m-m;    for(i=0;(1<
<=temp;i++) if(temp==(1<
m+m+(1<<(i-1))&&p
<

  

 

转载地址:http://ozrma.baihongyu.com/

你可能感兴趣的文章
本地串口TCP/IP 映射到远端串口
查看>>
锁机制探究
查看>>
硬盘直接引导启动Manjaro Linux iso
查看>>
CodeSmith代码生成工具介绍
查看>>
几个常用且免费的接口
查看>>
jQuery文件上传插件 Uploadify更改错误提示的弹出框
查看>>
RHEL6下Apache与Tomcat整合
查看>>
Heartbeat+DRBD+MFS高可用
查看>>
要感谢那些曾经慢待你的人
查看>>
常见的global cache等待事件
查看>>
第 7 章 多主机管理 - 047 - 管理 Machine
查看>>
CentOS5和6的系统启动流程
查看>>
怎么看域客户端是否继承了组策略
查看>>
linux防止DDoS***
查看>>
6.4 Linked List 重做
查看>>
小米路由
查看>>
QT 学习 之 窗口拖拽 实现
查看>>
PHP的ftp文件,多文件上传操作类
查看>>
js中清空数组的方法
查看>>
python def说明
查看>>