HDU 1538 A Puzzle for Pirates 海盗分金问题

题目大意:

就是现在n个海盗分配m枚金币, 依次编号为P1~Pn

然后海盗按照Pn->P(n - 1)->...->P2->P1的顺序提出分配方案, 然后或者的海盗投票表示是否赞成这个方案, 提出方案的海盗也会参与投票, 如果有一半或者以上的海盗赞成, 那么这个方案就通过, 按照这个方案分配金币, 否则这个海盗会被扔进海里喂鲨鱼, 各个海盗都决定聪明并且想使得自己的利益最大化, 当然这里各个海盗首先要能够存活才会考虑使得自己的金币尽量多, 问P(p)编号的海盗最后会获得多少个金币(当有多个可能时输出最少的)


大致思路:

首先当m个海盗按照经典的海盗分金问题进行分配的时候, 如果m个金币够分, 也就是说n <= 2*m的时候, 不会有什么问题, 第n个海盗分得最多的钱, 和Pn间隔为偶数的获得1金币, 其他0金币

那么整个问题变复杂的地方出现在当m个金币不够分的情况也就是当n > 2*m的时候

当n == 2*m + 1的时候, 第n个人只有将所有m个金币分给2*m个人的情形下没有金币的m个人, 每人一金币, 才能活命, 否则某个海盗在让第n个人死的情形下自己的利益没有变化, 那么n的方案就会被反对, 那样反对票回避支持多一票, Pn就死了, 所以Pn为了活命只能给所有Pi(i是奇数)的人分1金币保证自己不死

当n == 2*m + 2的时候, Pn需要把自己的m个金币分给在n == 2*m + 1情形下没有金币的人, 才能加上自己的票保证不死, 那么n == 2*m + 1情形下有m + 1个人没有金币, 也就是说, m个金币给这些人的时候这m + 1个人也都是有可能没有金币的, 所以询问n == 2*m + 2清醒下的每一个人答案都是0

当n == 2*m + 3时, Pn最多将m个金币分给n == 2*m + 2情形下一定拿不到金币的m个人, 那么

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值