海盜分金幣

2021-06-27 23:46:11 字數 1298 閱讀 7340

首先, 把這個問題轉換為乙個遞迴的演算法問題, 描述為, 如果我知道了上一家的分法, 我如何能夠使我的利益最大化呢?

現假定有5個人分, 金幣總數是100, 那麼第二個人的分法是1, 1, 0, 98, 那麼第乙個人需要的就是拉攏分的最少的兩人, 然後給他們多乙個金幣, 這樣就可以取得他們的支援了, 所以第乙個人的分法是2, 0, 1, 0, 97 或者0, 2, 1, 0, 97.

所以轉換為程式之後, 我們可以分任意金幣和任意的人了。

#include using namespace std;

#include #include const int max_gold = 100;

int gold3 = ;

void bubblesort(vector&unsorted, vector&index)

} }}vectorgetgoldn(int n)

return re;

} else

// sort old

bubblesort(old_re, old_index);

// how many people you need

int support_people = n/2;

// assign value

for (int i = 0; i< support_people; i++)

for (int i = support_people; i< n-1; i++)

int last_gold = max_gold;

for (int i = 0; i< n-1; i++)

last_gold -= re[i];

re[n-1] = last_gold;

return re; }}

void output(vectorre)

比如, 我分100個人, 結果是

但這個問題並未完結。 還有著如下的思考:

首先, 我這個模型, 條件是大於百分之五十才行, 而不是大於等於百分之五十, 因為很明顯, 如果等於百分之五十即可的話, 那麼只剩下兩個人, 那麼第乙個人會分100, 0. 所以地推一下, 剩三個人, 第乙個人會分99, 0, 1……

其次是考慮一下, 比如第三個人, 他知道如果只有三個人分, 那時候他的利益才最大化, 那麼他是不是會總是投反對票呢?

然後是考慮一種極端情況, 海盜人超級多, 大於200個呢? 這個時候, 按照我的演算法, 甚至會是負數……

這些問題等以後在思考吧。

海盜分金幣

問題描述 有n個海盜,得到了m個金幣。他們決定將之瓜分。分的方法是站成一排,從1號到n號海盜依次提出方案。如果提出的方案得到的支援人數比例超過q 0 q 100 那麼就通過方案,進行分配,提出方案的海盜也有投票權。否則就把提出方案的人扔到海浬喂鯊魚。海盜都是精明的,他們能夠分析出如何最大化自己的利益...

海盜分金幣

有5個海盜,獲得了100枚金幣,他們約定乙個分配方案.商議方式 1.有5個海盜輪流提出分配方案 2.如果超出半數海盜 包括提出者 同意該方案,則按照該方案分配 3.如果同意該方案的人數 包括提出者 小於等於半數,則提出者要被扔到海浬餵魚,剩餘海盜繼續商議分配 4.海盜們是絕對理性的,以自己盡可能獲得...

海盜分金幣問題

另外乙個很有趣的問題 話說一天有5個海盜搶了一艘who的遊輪,搶到了100枚金幣,但這5個人沒有老大,不知道怎麼分這100枚金幣。不過5個人都絕頂聰明,他們決定 1,抽籤,決定12345五個號碼,2,由1號提分配方案,大家一起舉手表決,超過半數同意則通過 否則被扔進大海浬喂鯊魚 3,1號死了由2號提...