zoukankan      html  css  js  c++  java
  • (算法)海盗分赃_2

    分享一篇趣文(来自伯乐在线:http://blog.jobbole.com/70395/),同样是海盗分赃问题,这篇文章以诙谐幽默的口吻以及浅显易懂的对话来解释海盗分赃问题。

    与上一篇博文海盗分赃_1不同的是,这里的投票规则为半数即可,并不要求大于半数。因此该问题的思路过程结果为:

            (300,0)

          (299,0,1)

        (299,0,1,0)

      (298,0,1,0,1)

    (298,0,1,0,1,0)

    文章如下:

    #算法题# 6个海盗要分赃300金币。规则是由资格最老的海盗提出各人分到的数量,然后全体投票。如方案得到至少半数同意票,则按该方案执行,否则提出方案的海盗被杀死,再由剩下人中资格最老的继续提出方案。海盗都很聪明,在能生存的前提下会追求获利最大化。问最后分赃结果是怎样的?

    这个题挺有意思的,主要测试的是一种简化问题的思维能力,类似于中学数学里的证明题,先看n=0是否成立,然后假设n-1成立,证明n也成立。

      如果从6个人的角度来看确实无从下手,看起来似乎每个人都有投反对票把资格最老的海盗弄死然后自己多分点的倾向,但是每个人能分到多少又想不明白。

      因为变化实在太多了,那就先假设海盗们乱投了一气,杀死了四个海盗,最后只剩下了两个人吧。

      这下轮到老五提出方案了。他一看就剩俩人,那咱自己一票就是50%,不用管老六是否赞成,太好了!于是根据生存&&获利最大化原则,他把300个金币都分给了自己,老六啥也没得到,而且一投票就通过了,他一点办法也没有。

      所以,当n=2的时候,本算法题得到了第一个确定而且稳定的结果:(300,0)。下面可以倒推n=3,4,5,6的情况。

      看到这个结果,老六傻眼了。合着自己搀和了半天啥也没有啊,而且还害死了前面对自己挺好的几个前辈,太亏了! 于是老六对上帝祈祷:“上帝啊,如果再给我一次重来的机会,我一定会对老四说:我投你,如果非要给这句话加上一个期限,我希望是一万年!”

      话说也巧了,上帝正好从旁边路过,听到如此熟悉而虔诚的祷告,不禁心生恻隐,于是现身对他们说:“好吧,既然你背了我的好基友孙悟空的台词,那我就满足你的这个请求。”

      老五一看不干了:“Ooooooh Nooooooo!上帝啊,你可不能偏心!”

      可是上帝必须是有身份证的体面人,是要讲信誉讲诚信的。所以一下子那四个死去的海盗又复活了,开始重新分配赃物。

      老六首先嘀咕着:“老五真不是东西,剩下俩人就欺负我。这次只要老四给我一个金币,我就投赞成票!反正无论如何也轮不到我来分,到老五这儿就game over了…”

      老五一听急了:“要是这样,老四可以一个大子都不给我就以2:1的票数通过了,不干!如果老三给我一个金币,我就赞成老三,我们俩50%赞成票,让老四老六都喝西北风去!”

      老四奸笑着说:“ 别闹了,你们俩想黑我,没门。这回我知道有老三在前面,加上老五和他狼狈为奸,肯定轮不到我来分。这样吧,老二给我一个金币就行了,再给老六一个,这样咱仨就通过了,嘿嘿,轮不到老三分配就结束!”

      老三怒了:“老大还活着呢!老二算神马东西!让老大分!老大给俺和老五各一个金币,我们哥俩就支持你,3票就够了,其他人反对也没用!”

      老大嘿嘿一笑:“真的?你娃上回把老子给害死了,这次老子能信你?”

    老三哭着说:“老大你大人不记小人过,上回我不是也被他们害死了么?这次我要不支持你我就是个锤子,你想啊,老二分的话我啥都拿不到,你老给我一个金币我已经感激不尽了!”

      老五也赶紧表忠心:“老大你就这么定吧,我们要是投了反对票就轮到老二分了,按照老四老六的意思,我和老三都得喝西北风啊!上帝在旁边见证,要是我们俩言而无信,出门就被车撞死!”

      上帝不屑地哼了一声:“我在这里还要什么车撞,我拿块豆腐都能砸死你们信不?”

      老三老五吓得连连点头:“我信,我信!”

      老二老四老六一看形势危急,纷纷嚷嚷起来:“老大,这俩小子不能信啊!”

      老大看了看他们:“不信他们难道信你们?最不可信的就是老二,他就盼着我死好拿大头呢,以为我傻啊?哼哼。”

      老二无话可说,郁闷地蹲到一边抽烟去了。老四老六还不甘心:“老大,害死你老二肯定是最赚的,所以他肯定投反对票。可我们也没多大盼头不是?最多也就得一个金币。您老别给老三老五金币,给俺们,俺们投你也是一样的两票嘛!”

      老大想了想说:“不行。如果老子死了老二来分,你们也能得一个金币,所以老子要给你们一个金币对你们来说没区别,除非老子给你们俩金币才能保证你们不反水。可这样不如给老三老五各一个金币划算。嘿嘿,你们别忽悠老子,老子死了一回现在学乖了!”

      上帝越听越糊涂,有点不耐烦地打断了他们:“你们说的都什么玩意?玩逻辑是不?欺负俺们文科生呗?赶紧的,1000年前我约好了和孙悟空一起去塔图因星踢球,还有十几万光年的山路要赶,没工夫听你们在这儿扯淡。”

      老大一看大局已定,于是庄严地咳嗽一声,说道:“那老子就提了。老二老四老六得0个,老三老五得1个,老子拿298个。”

      老二老四老六自然不干,都投了反对票。老三老五投了赞成票,加上老大自己一票,正好50%赞同,于是六个海盗分完赃物,心情各异地走了。

      只有上帝呆在了原地,这个结果还真是出乎他的意料啊!又过了100年他终于琢磨明白了,自言自语地说:“算法这门学问还真是博大精深!应该好好学学!”

      于是上帝拿出手机,上网买了本原版的《算法设计手册》 ,然后给孙悟空打电话:“喂老孙不好意思,我有事不去踢球了。啥事?那啥,我得回去学算法….”

  • 相关阅读:
    Git之不明觉厉11-利其器source tree
    GUI for git|SourceTree|入门基础
    UIButton
    NSDictionary
    注释方法、代码块加快捷键注释
    UIActionSheet
    UIActivityIndicatorView
    UIPickerView
    UIImageView
    UIAlertView
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4613774.html
Copyright © 2011-2022 走看看