NYOJ 994 海盜分金 逆向遞推

2022-03-25 12:28:23 字數 2052 閱讀 9151

題意:有n個海盜劫得了窖藏的m塊金子,並準備瓜分這些戰利品。按照古老流傳下來的分金法則,由最厲害的一名海盜提出乙個分金方案,假如有不小於一半的海盜(包括自己)支援這個方案,則按這個方案分,否則把這個海盜扔進海浬,重複由下乙個厲害的海盜提出方案。

大家都知道,所有海盜都是貪婪的,雖然他們都樂於看到自己的同伴被扔進海浬,但是他們還是希望在保命的前提下分的最多的金子,現在已經按海盜的厲害程度進 行了編號,最厲害的海盜為最大號,依次到小,那麼第 k 號海盜能分的多少金。(如果他的得金數不能確定,輸出0)

輸入:(1 ≤ n ≤ 10^4) (1 ≤ m ≤ 10^7)(1 ≤ k ≤ n)

輸出:第k個海盜能獲得的金幣數

參考博文:

思路:如果從上往下分析,將會受到小號策略的影響,不妨逆向從小號(只剩1和2)開始往大遞推出關聯,關聯詳見博文;

此題的關鍵必須深刻理解海盜之間的規則:

1.即使沒有金幣,也必須要保住性命;

如在n > 2*m部分,第乙個穩定狀態(n-2*m為2^k,同時也是確定分配方案的海盜的id)就是通過給1~2m海盜分配每人分配1個金幣收買,剩下的支援票屬於就是來自於n-2^(k-1)~n怕死而支援的海盜;

2.在保命的前提下,能獲得金幣最好;

在n = 2*m+1時,為了保命只能將m個金幣全部給奇數好的海盜,但是在n = 2m+2時,就可以利用2m+1這一點,可選的海盜數就為101個,這裡就產生了不確定性;

即當第乙個穩定狀態n >= 2m+2時,任意小於等於n的海盜要不就是》2m原本就不能獲得,只是存活下來,結果為0。要不就是因為上乙個狀態的不確定性,導致不能確定是否會獲得金幣,結果也是0;

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include8 #include9 #include10 #include11 #include

12 #include13 #include14

using

namespace

std;

15#define rep0(i,l,r) for(int i = (l);i < (r);i++)

16#define rep1(i,l,r) for(int i = (l);i <= (r);i++)

17#define rep_0(i,r,l) for(int i = (r);i > (l);i--)

18#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)

19#define ms0(a) memset(a,0,sizeof(a))

20#define ms1(a) memset(a,-1,sizeof(a))

21#define msi(a) memset(a,0x3f,sizeof(a))

22#define inf 0x3f3f3f3f

23 typedef long

long

ll;24

#define a first

25#define b second

26#define mk make_pair

27 template28

void read1(t &m)

2932

while(ch>='

0'&&ch<='9')

33 m = x*f;34}

35 template36

void read2(t &a,t &b)

37 template38

void read3(t &a,t &b,t &c)

39 template40

void

out(t a)

4145

int t,kase = 1

,i,j,k,n,m,c;

4647

intmain()

48else

63if(ans == -1) puts("

thrown");

64else printf("

%d\n

",ans);65}

66return0;

67 }

海盜分財寶

關於海盜分財寶問題的一點看法 問題如下 10名智商極其高的海盜 都會選擇最有利於自己的方案 掠得100顆寶石。分贓。方法 10名海盜抽籤編為1 10號。從1號開始提出分贓方案,然後表決 本人的票計算在內 若超過半數人同意,則通過方案 否則扔進海浬餵魚。若1號死亡,則從2號繼續。問題 如果你是1號,如...

海盜分寶問題

數學的邏輯有時會導致看來十分怪異的結論。一般的規則是,如果邏輯推理沒有漏洞,那麼結論就必定站得住腳,即使它與你的直覺矛盾。1998年9月,加利福尼亞州帕洛阿爾托的stephen m.omohundro寄給我一道難題,它恰好就屬於這一類。這難題已經流傳了至少十年,但是omohundro對它作了改動,使...

海盜分寶石邏輯題目

問題描述 5個海盜搶到了100顆寶石,每一顆都一樣的大小和價值連城。他們決定這麼分 1。抽籤決定自己的號碼 1,2,3,4,5 2。首先,由1號提出分配方案,然後大家5人進行表決,當且僅當超過半數的人同意時,按照他的提案進行分配,否則將被扔入大海喂鯊魚。3。如果1號死後,再由2號提出分配方案,然後大...