海盜分贓難題

故事:

船上有十個(gè)海盜有勾,有一天修肠,他們搶到了一箱100斤的黃金,打算分贓(以斤為最小單位)恕出。十個(gè)海盜從高到低分為10個(gè)等級(jí)询枚,分配權(quán)在最高等級(jí)的海盜手里。他可以任意分配每個(gè)海盜的所得浙巫,但必須取得半數(shù)或半數(shù)以上的海盜(包括自己在內(nèi))的支持金蜀,否則他將被同伴處死。處死之后分配權(quán)將轉(zhuǎn)移到下一個(gè)等級(jí)最高的海盜手里的畴,當(dāng)然渊抄,他也將面臨同樣艱難的選擇。

假設(shè)和問(wèn)題:

假定“每個(gè)海盜都是絕對(duì)理智的”丧裁,那么“海盜頭子該提出怎樣的分配方案才能夠使自己的收益最大化护桦?”

請(qǐng)先自己思考一段時(shí)間,不要看答案煎娇!
小樣兒二庵,想看了吧,先給個(gè)小提示吧

這題的關(guān)鍵在于反向推理逊桦,化繁為簡(jiǎn)眨猎,分治解決。用的是類(lèi)似于遞歸的思路强经。 十個(gè)海盜情況不好考慮睡陪,那么當(dāng)只剩下兩個(gè)海盜的情況呢,三個(gè)呢匿情?注意題目兰迫,只要包括自己在內(nèi)的半數(shù)以上的海盜同意即可。

思路和方案:

從最后一個(gè)海盜開(kāi)始炬称,模擬每個(gè)海盜的小心思汁果,排在前面的海盜,要考慮后面海盜的心思玲躯,這其實(shí)是一個(gè)遞歸過(guò)程:

10號(hào):只要前面的都死翹翹据德,我獨(dú)得黃金鳄乏,不過(guò)當(dāng)只剩下9號(hào)時(shí),他必然要占有全部黃金棘利,我啥都得不到橱野。我一定不會(huì)支持9號(hào)。因此善玫,只要9號(hào)以前的人給我一斤黃金水援,我就支持他。

9號(hào): 8號(hào)如果當(dāng)頭目茅郎,只要給10號(hào)一斤黃金就可以收買(mǎi)他蜗元,我什么都得不到,因此系冗,只要8號(hào)以前的人給我1斤黃金奕扣,我就支持他。

8號(hào): 7號(hào)如果當(dāng)頭目毕谴,只要給9號(hào)一斤黃金成畦,就可以收買(mǎi)他,我什么都得不到涝开,因此循帐,只要7號(hào)以前的人給我1斤黃金,我就支持他舀武。

7號(hào): 6號(hào)如果當(dāng)頭目拄养,只要給8號(hào)、10號(hào)各一斤黃金银舱,就可以收買(mǎi)他(因?yàn)槿绻?號(hào)死翹翹瘪匿,7號(hào)就會(huì)占有分配權(quán),他只要給9號(hào)一斤黃金即可寻馏,到時(shí)8棋弥、10號(hào)啥都得不到),我什么都得不到诚欠,因此顽染,只要6號(hào)以前的人給我1斤黃金,我就支持他轰绵。

……

1號(hào):......

這樣當(dāng)聰明的0號(hào)當(dāng)頭目時(shí)粉寞,從0號(hào)9號(hào)獲得的黃金分別是:96,0,1,0,1,0,1,0,1,0

程序建模:

花了一個(gè)上午寫(xiě)了段小程序,結(jié)果與預(yù)期符合左腔,大家想下有沒(méi)有優(yōu)化空間唧垦。

public class PirateSpoil3 {

  private static int goldNumSum = 100;


  public static int[] goldNum(int pirateNum, int privaeChiefNo) throws Exception {
    int votesGet = 1;
    int goldLeft = 100;
    int[] goldNumEveryOne = new int[10];
    int votesNeed = 0;
    if (pirateNum % 2 == 1) {
      votesNeed = pirateNum / 2 + 1;
    } else {
      votesNeed = pirateNum / 2;
    }

    if (pirateNum >= 3) {
      // 繼任者總是傾向于neng死自己,這樣他就會(huì)獲得最大利益液样,因此繼任者分配都是0
      goldNumEveryOne[privaeChiefNo+1] = 0;
      // 繼任者的繼任者將一無(wú)所獲振亮,因此巧还,只要給他分配一斤黃金,便可收買(mǎi)他
      goldNumEveryOne[privaeChiefNo +2] = 1;
      //假設(shè)自己被殺后坊秸,繼任者的最優(yōu)選擇
      int[] goldNumEveryIfNext = goldNum(pirateNum - 1, privaeChiefNo + 1);
      //遍歷繼任者的最優(yōu)選擇狞悲,假如發(fā)現(xiàn)失意者(沒(méi)有分配到任何黃金),就分配一斤黃金收買(mǎi)妇斤,獲取必需的投票數(shù),從繼任者的繼任者開(kāi)始算
      for(int i = privaeChiefNo + 2;i<=9;i++){
        if (goldNumEveryIfNext[i]==0&&goldNumEveryOne[i]==0){
          goldNumEveryOne[i]++;
          votesGet++;
        }
        //獲得必需投票數(shù)即可
        if (votesGet >= votesNeed) {
            break;
        }
      }
      //計(jì)算海盜頭子可獲得的黃金數(shù)目
      for(int j = privaeChiefNo+1;j<=9;j++){
        goldLeft=goldLeft- goldNumEveryOne[j];
      }
      goldNumEveryOne[privaeChiefNo ] =goldLeft;
      return goldNumEveryOne;


    } else if(pirateNum==1){
      goldNumEveryOne[privaeChiefNo ] = goldNumSum;
    }else if(pirateNum==2){
      goldNumEveryOne[privaeChiefNo ] = goldNumSum;
      goldNumEveryOne[privaeChiefNo+1] = 0;
    }

    return goldNumEveryOne;

  }

  public static void main(String[] args) throws Exception {
    int privateNumALL = 10;
    int leftNum = 10;
    System.out.println(JSON.toJSONString(goldNum(leftNum,privateNumALL-leftNum)));
  }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丹拯,一起剝皮案震驚了整個(gè)濱河市站超,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乖酬,老刑警劉巖死相,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咬像,居然都是意外死亡算撮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)县昂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肮柜,“玉大人,你說(shuō)我怎么就攤上這事倒彰∩蠖矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵待讳,是天一觀的道長(zhǎng)芒澜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)创淡,這世上最難降的妖魔是什么痴晦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮琳彩,結(jié)果婚禮上誊酌,老公的妹妹穿的比我還像新娘。我一直安慰自己汁针,他們只是感情好术辐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著施无,像睡著了一般辉词。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猾骡,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天瑞躺,我揣著相機(jī)與錄音敷搪,去河邊找鬼。 笑死幢哨,一個(gè)胖子當(dāng)著我的面吹牛赡勘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捞镰,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼闸与,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了岸售?” 一聲冷哼從身側(cè)響起践樱,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凸丸,沒(méi)想到半個(gè)月后拷邢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屎慢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年瞭稼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腻惠。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡环肘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出集灌,到底是詐尸還是另有隱情廷臼,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布绝页,位于F島的核電站荠商,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏续誉。R本人自食惡果不足惜莱没,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酷鸦。 院中可真熱鬧饰躲,春花似錦、人聲如沸臼隔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摔握。三九已至寄狼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泊愧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工伊磺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人删咱。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓屑埋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親痰滋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摘能,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 這是第二天讓我仔細(xì)想想你的模樣了,從我十二歲到今年過(guò)年就二十了敲街,時(shí)間過(guò)得有點(diǎn)快了徊哑,我剛遇見(jiàn)你,你的印象很好聪富,我想和...
    葉翁不孤閱讀 256評(píng)論 0 1
  • 2019年1月14日星期一晴 時(shí)間過(guò)得真快啊著蟹!感覺(jué)許夢(mèng)澤才剛踏入小學(xué)的校門(mén)墩蔓,就要迎來(lái)本學(xué)期第一次期末考試了。掰著手...
    許夢(mèng)澤親子日記閱讀 117評(píng)論 0 0
  • 《幸福的陷阱》打卡第二天 這個(gè)世界的確在變,而且變化越來(lái)快涮雷,即便我們不斷承受著各種內(nèi)心的困擾阵面,但仍希望自...
    清涼世界雨閱讀 1,744評(píng)論 0 9