日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

海盗分金问题

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 海盗分金问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

題目描述

  有5個海盜1、2、3、4、5,得到100個金幣,決定分掉,分法怪異:首先A提出分法,B~E表決,如果不過半數(shù)同意,就砍掉A的頭。然后由B來分,C~E表決,如果不過半數(shù)同意,就砍掉B的頭。依次類推,如果假設(shè)強盜都足夠聰明,在不被砍掉頭的同時獲得最多金幣。問:最后結(jié)果如何?

?

定義問題

  5個海盜必須按照上述規(guī)則,找出最優(yōu)分配方案,否則將被其他人扔下大海。

?

當(dāng)前狀態(tài)

  正確分配方案還沒出來,必須盡快找出最優(yōu)解。

?

分析

  典型的nim取子問題的變形,采用倒推方式即可找出最優(yōu)解。

?

制定解決方案

  倒推方法如下所示。

  (1)如果只有海盜,如何分配?

  (2)如果有兩個海盜,如何分配?

  (3)如果有n個海盜,每個海盜至少需要幾個人同意?找出n-1個海盜情況下的分配方案中,需要收買多少海盜?最低需要多少金幣?

?

實現(xiàn)解決方案

  倒推方法實現(xiàn)如下表所示,每一行表示一張人數(shù)情況下的分配方案,即,最后一行給出5號海盜的分配方案。

  

  注意:從表中可以看出聰明是大前提,當(dāng)然殘忍也是。nim取子游戲向來是君子游戲,沒有這個前提的弧,后面的海盜不按套路出牌就不可能有最優(yōu)解。

?

標(biāo)準(zhǔn)化解決方案

  從上表不難看出規(guī)律,也即,自己拿盡可能多的金幣,同時保證后面的人依次分配0、1交錯的金幣數(shù)。規(guī)范化命題如下:

  *命題:假設(shè)對于n個聰明、殘忍的海盜(n>=1),搶了Gold個金幣,要進行分配,每個人都想分配足夠多的金幣,他們寸步不讓。分配順序是:n號海盜>n-1號海盜....1號海盜,即是:先由n號海盜決定如何分配,若分配不均,n號被殺死,n-1號海盜再決定如何分配,依次類推。在該規(guī)則下,n號海盜最佳分配方案應(yīng)當(dāng)如此(為簡單,避免使用地板函數(shù),按n為奇偶數(shù)分類討論):

  不妨假設(shè)ones為得到1個金幣好海盜,zeros為得到0個金幣的海盜數(shù)。

  (1)當(dāng)n為奇數(shù)時,ones = zeros = (n - 1) / 2,分配方案為Gold-ones,0,1,.......,0,1

  (2)當(dāng)n為偶數(shù)時,ones = (n - 2) / 2, zeros = n / 2,分配方案為Gold - ones,0,1,......1,0

  該命題從上述分析中的規(guī)律中得出,不是定理,更不是公理,作為標(biāo)準(zhǔn)化解決方案需要嚴(yán)格證明。

  證明:

  注釋:使用跳躍數(shù)學(xué)歸納法證明,跳躍的step為2。

  先證明n為奇數(shù)時命題是否成立。

  當(dāng)n = 1時,顯然該命題成立

  假設(shè)當(dāng)n = m(m > 1)時命題成立,則分配方案為

  Ones(m) = Zeros(m) = ( m - 1) / 2

  Proposa(m) = Gold - Ones(m),0,1,......,0,1

  = Gold - (m - 1) / 2, 0,1.....,0,1

  當(dāng)n = m + 1時,顯然命題成立,理由如下

  Ones(m + 1) = (m + 1 - 2) / 2 = (m?- 1) / 2,Zeros(m + 1) = (m + 1) / 2

  注意:

  (a)m+1為偶數(shù),計算ones和zeros需要換個公式

  (b)對比n=m情形,僅僅是多了個0

  Proposal(m + 1) = Gold - Ones(m + 1), 0, 1,.....,0, 1, 0

  = Gold - (m - 1)/2,0, 1, ......., 0, 1, 0

  對比Ones(m), Ones(m + 1), Zeros(m), Zero(m + 1)可以看出僅僅是在Proposal(m)序列后面添個0。這回導(dǎo)致Proposal(m + 1)與Proposal(m)兩個序列中,0,1交錯序列剛好錯位,對應(yīng)金幣分配方案中則為:m+1號海盜分配方案就是把Proposal(m)中沒有得到金幣的人每個給1個金幣實現(xiàn)自己金幣最大化,同時保證同意的人數(shù)大于等于2.

  綜上所述,當(dāng)n為奇數(shù)時,該命題成立。

  再證明n為偶數(shù)時命題是否成立。

  當(dāng)n = 2,命題成立(大于的最小偶數(shù)只能2)

  歸納方法同1.

  綜合1、2分析,該命題成立。

  證畢。

?

該標(biāo)準(zhǔn)化解決方案用程序?qū)崿F(xiàn)如下

  說明:該程序考慮了金幣數(shù)量遠(yuǎn)小于海盜數(shù)量時,最先出來分配的部分海盜都被殺死了。

1 #include <stdio.h> 2 3 const int g_first = 2; 4 const int g_zero = 0; 5 const int g_one = 1; 6 7 int print_proposal(int *gold, int *pirate, int *ones, int *zeros, int *status) 8 { 9 int ret = 1; 10 int number = 0; 11 int remain = *gold - *ones; 12 if (*pirate <= 0) 13 { 14 printf(".\n"); 15 return 0; 16 } 17 if (remain <= 0) 18 { 19 number = 0; /* not enough gold, killed by others, regenerate proposal */ 20 ret = 1; /* conitnue */ 21 22 /* regenerate proposal */ 23 if (*pirate % 2 == 0) 24 { 25 *ones = (*pirate - 2) / 2; 26 *zeros = *pirate / 2; 27 } 28 else 29 { 30 *ones = *zeros = (*pirate - 1) / 2; 31 } 32 } 33 else if (*status == g_one) 34 { 35 number = 1; 36 *ones--; 37 *status = g_zero; 38 } 39 else if (*status == g_zero) 40 { 41 number = 0; 42 *zeros--; 43 *status = g_one; 44 } 45 else { 46 number = remain; 47 *status = g_zero; 48 } 49 if (*status != g_first && *ones <= 0 && *zeros <= 0) 50 { 51 ret = 0; 52 } 53 54 printf("%d ", number); 55 *pirate = *pirate - 1; 56 57 return ret; 58 } 59 60 int main() 61 { 62 int gold; 63 int pirate; 64 int ones; 65 int zeros; 66 int temp; 67 int status; /* process first, zero or one */ 68 printf("Please Enter gold and pirate number:\n"); 69 while (scanf("%d %d", &gold, &pirate) == 2) 70 { 71 if (pirate < 1 || gold < 1) 72 { 73 break; 74 } 75 if (pirate % 2 == 0) 76 { 77 ones = (pirate - 2) / 2; 78 zeros = pirate / 2; 79 } 80 else 81 { 82 ones = zeros = (pirate - 1) / 2; 83 } 84 85 status = g_first; 86 printf("Proposal(%d, %d) is: ", gold, pirate); 87 temp = pirate; 88 while (print_proposal(&gold, &temp, &ones, &zeros, &status)) 89 ; 90 91 if(pirate == 1) 92 { 93 printf(".\n"); 94 } 95 96 printf("\n"); 97 printf("Please Enter gold and pirate number:\n"); 98 } 99 return 0; 100 }

  

決定下一步

  本問題到此為止,暫時沒有下一步動作。

?

總結(jié)

  這個結(jié)論告訴我們:

  (1)最先掌握分配權(quán)的人,看似最危險,膽小的人可能會擔(dān)心所有人都不支持你,你就只能被殺死了。其實,他優(yōu)先掌握了主動權(quán),天下武功,唯快不破,掌握市場先機很重要。

  (2)越快越好,但不能快過了頭。100個金幣,1000個海盜的話,最先出來分配的人必然死掉。同樣的,20年前搞酒店搜索,率先占據(jù)了主動權(quán),快得一塌糊涂那也沒戲。

?

?

?  

?


?

  該題目源自:微博陳利人。

?

  這是菜鳥我見這個問題分析的很透徹的一個帖子,感謝原作者。

?

?

  解答引自:http://blog.losthit.com/archives/pirate-and-gold/

轉(zhuǎn)載于:https://www.cnblogs.com/iloveyouforever/p/3449621.html

總結(jié)

以上是生活随笔為你收集整理的海盗分金问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久香蕉 | 午夜影院在线观看18 | 深夜成人福利视频 | 久久精品一区二区三区不卡牛牛 | 国产午夜精品一区二区三区 | 免费看日产一区二区三区 | 私人网站 | 波多野结衣视频免费看 | 亚洲品质自拍视频 | 亚洲石原莉奈一区二区在线观看 | 国产精品久久久久久久久久久久久久久久久久 | 已满18岁免费观看电视连续剧 | 色婷婷综合激情 | 2019中文字幕在线观看 | 国产毛片久久久久 | 午夜精品久久久久久久久久蜜桃 | 少妇肥臀大白屁股高清 | 女尊高h男高潮呻吟 | 久久精品国产大片免费观看 | 国产男女猛烈无遮挡免费观看网站 | 日韩av不卡在线播放 | 中文字幕av专区dvd | www欧美精品 | 欧美日韩一区二区三区在线 | 蜜臀av88 | 91国视频 | 亚洲视频六区 | 波多av在线| www.97ai.com| 国产女人和拘做受视频免费 | 五月激情婷婷综合 | 日韩欧美国产精品综合嫩v 国产小毛片 | 久久精品视频一区 | 夜夜爽夜夜操 | av免费天堂 | a在线免费 | 99精品在线视频观看 | 国产精品久久在线观看 | 国产精品国产三级国产 | 国产精品com | 五月在线 | 午夜激情四射 | 欧美亚洲色综久久精品国产 | 综合色亚洲 | 果冻av在线 | 99热激情 | 91看片淫黄大片91桃色 | 色诱视频在线观看 | 在线观看免费观看在线 | 久久久久久av无码免费网站下载 | 欧美日韩国产91 | 男生舔女生的屁股 | 国产又粗又黄 | 免费看裸体网站视频 | 在线观看黄色的网站 | 亚洲第一视频区 | 美女户外露出 | 欧美激情视频在线观看 | 91老女人| 国产国拍精品亚洲 | 国产精品久久综合视频 | 色婷婷在线视频 | 亲切的金子餐桌片段的金子 | 国产在线精品成人欧美 | 欧美夫妻性生活视频 | 黑人大群体交免费视频 | 在线观看无码精品 | 中文字幕无线码 | 色999日韩 | 三级性视频| 成人h动漫精品一区二 | 欧美日韩99 | 四虎黄色 | 久久黄色免费视频 | 青娱乐自拍视频 | 懂色av色吟av夜夜嗨 | 男人插女人网站 | 国产免费专区 | 国产主播99 | 中文字幕一区二区三区夫目前犯 | 黄色成年网站 | 操亚洲美女 | 国产一区二区三区自拍 | 日本不卡视频一区二区三区 | 亚洲av无码一区二区三区在线观看 | 91欧美在线视频 | 亚洲人高潮女人毛茸茸 | 成人在线播放av | www.国产成人| 无码人妻精品一区二区蜜桃色欲 | 中文字幕精品一区二区三区精品 | 男人疯狂高潮呻吟视频 | 成人久久久精品乱码一区二区三区 | 国产高潮网站 | 严厉高冷老师动漫播放 | 国产一区在线视频观看 | 成人你懂的 | 久久久免费在线观看 | 性激情视频 |