PTA海盜分贓(25分)

2021-10-02 09:35:25 字數 1629 閱讀 1399

p 個海盜偷了 d 顆鑽石後來到公海分贓,一致同意如下分贓策略:

首先,p 個海盜通過抽籤決定 1 - p 的序號。然後由第 1 號海盜提出乙個分配方案(方案應給出每個海盜分得的具體數量),如果能夠得到包括 1 號在內的絕對多數(即大於半數)同意,則按照該分配方案執行,否則 1 號將被投入大海喂鯊魚;而後依次類似地由第 2 號、第 3 號等等海盜提出方案,直到能夠獲得絕對多數同意的方案出現為止,或者只剩下最後一位海盜,其獨佔所有鑽石。請編寫乙個程式,給出第 1 號海盜的鑽石分配方案中自己分得的鑽石數量。

附帶的三個假定:

輸入格式:

輸入在一行中給出 2 個正整數 d 和 p(3≤p≤d≤100)。

輸出格式:

輸出第 1 號海盜的鑽石分配方案中自己分得的鑽石數量。

輸入樣例:

10 7
輸出樣例:

6
這個題很有意思,之前這類題我也在博弈論的書上看到過,第一次寫關於這個問題的演算法,也是很新奇。

如果寫在紙上,就不難發現他們的規律 讓我們來寫一下

(1)兩個人

1 海盜無論自己得到多少,2肯定不同意,因為沒有超過半數,所以只有 1 把所有的財產給 2 ,才能活命。

所以分配的結果為 : 0,d

(2)三個人

1 為了拉選票,肯定要籠絡那些沒有金幣的人,那麼金額為0就是首選的籠絡人才,而上面我們能看到 此刻的 2 金額為 0,其次打擊財產最多的人(因為你無論給他多少(自身盈利的情況下)他都不會滿足,所以不用考慮他的分配),所以 3 金額變成 0

所以分配的結果為 :d-1,1,0

(3)四個人

同樣適用(2)的理論 那麼此刻的 2 金額一定為 0 ,最後的人即 4 為拉攏物件,但是這樣還不會超過半數,那麼 3 就會比上次的多分配一枚金幣

所以分配的結果為 :d-3,0,2,1

(4)五個人 (超過一大半也就是有 3個人支援)

同上面的理論,拉選票就從金額最小的人(0個金幣)開始,如果不夠,則考慮1個金幣的人,如果人數夠了,那麼剩餘人將分不到金幣(自身利益最大化)

所以分配的結果為 :d-3,0,1,0,2

慢慢慢慢大家就會發現 海盜的人數超過三個人的時候就會出現規律

(5)六個人 分配的結果:d-4,0,1,2,1,0

(6)七個人 分配的結果:d-4,0,1,2,0,0,1

(7)八個人 分配的結果:d-5,0,1,2,0,1,1,0

(8)九個人 分配的結果:d-5,0,1,2,0,1,0,0,1

(9)十個人 分配的結果:d-6,0,1,2,0,1,0,1,1,0

發現規律了嗎?

沒錯每次只需要給上一次金幣數為0的傢伙一枚金幣,再給其中乙個上一次得到一枚金幣的傢伙兩枚金幣,第乙個海盜選票就超過一大半了!

那麼轉化為數學規律 當人數超過三個人的時候 第乙個海盜得到的金幣為: d - (p / 2 + 1)

**如下:

#include

using

namespace std;

intmain

(void

)

原創鏈結,感謝老哥:

PTA 海盜分贓

p 個海盜偷了 d 顆鑽石後來到公海分贓,一致同意如下分贓策略 首先,p 個海盜通過抽籤決定 1 p 的序號。然後由第 1 號海盜提出乙個分配方案 方案應給出每個海盜分得的具體數量 如果能夠得到包括 1 號在內的絕對多數 即大於半數 同意,則按照該分配方案執行,否則 1 號將被投入大海喂鯊魚 而後依...

海盜分贓(找規律)

題目 p 個海盜偷了 d 顆鑽石後來到公海分贓,一致同意如下分贓策略 首先,p 個海盜通過抽籤決定 1 p 的序號。然後由第 1 號海盜提出乙個分配方案 方案應給出每個海盜分得的具體數量 如果能夠得到包括 1 號在內的絕對多數 即大於半數 同意,則按照該分配方案執行,否則 1 號將被投入大海喂鯊魚 ...

兄弟分錢 海盜分贓

類似的反推問題。問題描述 1 媽媽有2000元,要分給她的2個孩子。由哥哥先提出分錢的方式,如果弟弟同意,那麼就這麼分。但如果弟弟不同意,媽媽會沒收1000元,由弟弟提出剩下 1000元的分錢方式,這時如果哥哥同意了,就分掉這剩下的1000元。但如果哥哥也不同意,媽媽會把剩下的1000元也拿走,然後...