hdu 1538 a puzzle for pirates
這是乙個經典問題,有n個海盜,分m塊金子,其中他們會按一定的順序提出自己的分配方案,如果50%或以上的人贊成,則方案通過,開始分金子,如果不通過,則把提出方案的扔到海浬,下乙個人繼續。現在給出n,問第k個海盜(第n個海盜先提方案,第1個最後提方案)可以分到多少金子,還是會被扔到海浬去。
同時分為兩個狀態穩定狀態和不穩定狀態:如果當n和m的組合使得最先決策的人(編號為n)不會被丟下海, 即遊戲會立即結束, 就稱這個狀態時"穩定的". 反之, 問題會退化為n-1和m的組合, 直到達到乙個穩定狀態, 所以稱這種狀態為"不穩定的".
接下來我們從簡單的開始分析:
如果只有兩個人的話:那麼2號開始提出方案,這時候知道不管提什麼,他自己肯定贊成,大於等於半數,方案通過,那麼2號肯定把所有的金子都給了自己。
如果只有三個人的話:那麼3號知道,如果自己死了,那麼2號肯定能把所有金子拿下,對於1號來說沒有半點好處。那麼他就拿出金子賄賂1號,1號拿到1個金子,總比沒有好,肯定贊成3號,剩下的3號拿下。
如果只有四個人的話:那麼4號知道,如果自己死了,那麼1號拿到1個金子,2號什麼都沒有,3號拿下剩下的金子。那他就可以拿出部分金子賄賂2號,2號知道如果4號死了,自己將什麼都沒有,他肯定贊成4號。
如此類推下去,如果n<=2*m時候,前面與n相同奇偶性的得到1個金子,剩下的第n個人全部拿下。
但是會有乙個問題便是,如果金子不夠賄賂怎麼辦:
我們將問題具體化:如果有500個海盜,只有100個金子,那麼前面200個已經分析過了。
對於201號來說,拿出100個金子賄賂前面的第200號分金子時拿不到金子的100個人。自己不拿金子,這樣剛好有101票保證自己不死,如果分給之前能拿到金子的人,那麼之前拿不到金子的人反正無論如何也拿不到金子,不如把你殺了。
對於202號來說,自己不能拿金幣,而賄賂上一輪沒有拿到金幣的101人中的100人就夠了,這樣湊齊101票。
對於203號來說,需要102個人的支援,顯然加上他自己,還需要101票,而金子不夠賄賂,別人會反對,而達到殺人的目的。所以這時其他人會分到多少金子是未知的,只知道203號會被扔進海浬,也就是說現在是「不穩定的」狀態,會退化到202號來分100個金子的狀態,那麼其他人得到的金子就遵循202號的方案。
對於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票,得以保命
所以可以得到結論:只有當n == 2 * m + 2^i的時候pn能保命,否則在第乙個2 * m + 2^i之前的海盜都會死亡
但是當n大於 2 * m + 1時,活下來的人分到的金子是不確定的,以202為例:到第202海盜的時候,除了自己剛好需要100個人支援,如果按照前面的當然給2 -- 200中偶數號海盜,但是假如他給201號海盜的話,他也會支援,因為假如202號丟進海浬,自己分的話他是得不到的,所以他能拿到金子,當然也支援202號,所以這樣就有101個人只要得到金子就一定會支援,所以雖然存活與否是能夠確定的,但是分得金子是不確定的,要麼是0要麼是1,但是不過本題中要求輸出海盜可以獲得的最少金子數量,也就是說此時輸出0即可。
所以歸納一下:
當n<=2 * m時:
與n奇偶性相同的獲得1,不同的獲得0,然後剩下的全部由n號海盜獲得
當n==2 * m+1時
第n個人為0,奇數號的人為1,偶數號的人為0
當n>2 * m+1時
設位置滿足2 * m + 2 ^ i的最大的位置為k,大於k的全部扔到海浬,其他人獲得金子是不確定的,輸出0
#include using namespace std;
const int n = 1e6 + 5;
typedef long long ll;
int t, a[30];
int main()
} else if(n==2*m+1)
else
}if (k > 2 * m + a[pos])
else}}
return 0;
}
海盜博弈論
charlesgao 2011 06 09 17 39 海盜分金是乙個非常古老的問題,在1999年 科學美國人 正式把它發表之前,已經至少流行10年了,相信很多人都有所耳聞,也知道解法。此前死理性派也對這個問題也有所 涉及 今天我們就來回顧一下這個有意思的問題,並且在把問題推廣到大規模海盜團夥後,會...
海盜分金幣問題
另外乙個很有趣的問題 話說一天有5個海盜搶了一艘who的遊輪,搶到了100枚金幣,但這5個人沒有老大,不知道怎麼分這100枚金幣。不過5個人都絕頂聰明,他們決定 1,抽籤,決定12345五個號碼,2,由1號提分配方案,大家一起舉手表決,超過半數同意則通過 否則被扔進大海浬喂鯊魚 3,1號死了由2號提...
海盜分金的問題
海盜分金好像是個博弈論的老問題了。本科的時候聽gxl談到過問題本身,沒有去解。昨天,lx問到我這個問題。思考了一下解法,不知道對不對,寫在這裡。流行的問題是這樣 五個海盜搶到了100枚金幣,他們決定這麼分 1 抽籤決定自己的號碼 5 4 3 2 1 2 首先,由5號提出分配方案,然後5人共同進行表決...