博弈論 巴什 威佐夫 nim遊戲 學習筆記

2022-05-02 20:30:11 字數 2847 閱讀 5750

博弈論有好多好多好多..

整理一下我來寫關於巴什博弈,威佐夫博弈+nim遊戲

首先先寫一些名詞:

必敗態:即奇異局勢,面對這種局勢必敗。

必勝態:通過合理操作可以變成必勝局。

1.巴什博弈

題面:alice 和 bob 玩取石子遊戲。他們的遊戲是這樣的:總共有 n 個石頭,每個人每次可以取 1 到 m 個石頭,不能不取。最後取完的人獲勝。現在alice 先取,假設雙方都採取最好的策略,告訴你 n 和 m,問他是否能贏,如果能,第一次要取幾個。
這道題應該算最早接觸的博弈,在小學數學課本上的玩意兒。

這題其實就是判斷\(n\)是否為\((m+1)\)的

如果先手取\(1\),那麼後手可以取\(m\).

如果先手取\(2\),那麼後手可以取\(m-1\).

如果先手取\(3\),那麼後手可以取\(m-2\).

如果先手取\(m\),那麼後手可以取\(1\).

這一樣,無論先手取什麼,後手都可以將其維護為\(m+1\)

很明顯,如果\(n\)為\((m+1)\)的倍數,那麼先手必敗

若不是倍數,則先手可以先取\(n\)%\((m+1)\)個,這樣,剩下來的石子就為\((m+1)\)的倍數,那麼後手無論取幾,先手都可以維護為\((m+1)\)個,那麼先手必勝

**:

#include #include using namespace std;

int n,m;

int main()

\)))

if\(([k*t]==a)\)先手敗

else 後手敗

狀態(奇異局勢)\((0,0)(1,2)(3,5)(4,7)(6,10)(8,13)(9,15)(11,18)(12,20)\)...都是先手敗

差分別為\(0,1,2,3,4,5,6,7,8....\)

因此判斷\(a,b\)的差是否符合上面奇異局勢即可

對於奇異局勢,有如下公式:

\(a[i]=[i*(1+\sqrt)/2],b[i]=a[i]+i\)。(\(k=0,1,2\)..,表示取整)

其中,可以判斷\(i\)為\(a\),\(b\)的差,即是k

那判斷\([k*(1+\sqrt)/2)]\)是否為a即可

#include#include#includeusing namespace std;

int main()

int k=b-a;

if(int(k*(1+sqrt(5))/2)==a)printf("0\n");

else printf("1\n");

} return 0;

}

3.nim遊戲

寫這題前先放上異或性質:

1^1=0

0^0=0

1^0=1

a^0=a

a^a=0

a^b^a=a^a^b=0^b=b

丟上題面

甲,乙兩個人玩nim取石子遊戲。

nim遊戲的規則是這樣的:地上有n堆石子(每堆石子數量小於10000),每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。

這題好神奇的。

設這些堆分別為:\(a_1,a_2,a_3...a_n\)

若\(a_1\)

$a_2$

\(a_3\)...\(a_\)^\(a_n==0\)則先手敗

否則先手勝。

證明一下叭:

首先,若所有都為\(0\),那麼\(0\)

$0$\(0\)...^\(0=0\)

否則:這些堆當中設所有的異或和為\(k\)。設\(k\)的最高位為\(i\),那麼一定有個數第\(i\)位是\(1\),而假設這就是\(a_1\)。再設除了\(a_1\)其他的異或和為\(x\),則:\(a_1\)^\(x=k\)。且\(x\)沒有第\(i\)位。

然後把\(a_1\)^\(k\)。

這時,\(a_1\)

$k$\(x\)=\(a_1\)

$x$\(k=k\)^\(k=0\)

若這時\(k=0\),那麼怎麼變動都不可能異或和為\(0\)了。

\(pia\)上**

#include#includeusing namespace std;

int t,n,x;

int main()

if(!ans)printf("no\n");

else printf("yes\n");

}return 0;

}

階梯nim

送上題麵先:

有n個位置1...n,每個位置上有ai個石子。有兩個人輪流操作。操作步驟是:挑選1...n中任一乙個存在石子的位置i,將至少1個石子移動至i−1位置(也就是最後所有石子都堆在在0這個位置)。誰不能操作誰輸。求先手必勝還是必敗。
其實這個結果只跟奇數階梯上的石子有關。

如果先手把偶數階梯的若干石子往下移,那麼後手也會相應把這堆石子繼續往下移,直到\(0\),然鵝這樣並不會改變什麼,只會改變石子的數量。

如果先手吧奇數階梯的若干石子往下移,那麼當這堆石子到\(0\)的位置時,變成之前的後手先移其他的了。

所以,這題只要把奇數階梯上的石子走一遍nim即可。

by rainy7

博弈論 威佐夫博弈

1.威佐夫博弈的條件 1 人數為兩人 2 物品為兩堆,每乙個人在取物品的時候要麼在一堆中取若干物品,要麼在兩堆中取相等的物品。每次至少乙個,可以取完這一堆。3 先手必敗的條件 在奇異局勢下必敗。2.ok,如果你不是很懂什麼叫做奇異局勢,那麼聽我解釋。我們知道物品兩為兩堆,每一堆的數量數a,b。我們記...

博弈論 威佐夫博弈

理論分析 問題 首先有兩堆石子,博弈雙方每次可以取一堆石子中的任意個,不能不取,或者取兩堆石子中的相同個。先取完者贏。分析 首先我們根據條件來分析博弈中的奇異局勢 第乙個 0 0 先手輸,當遊戲某一方面對 0 0 時,他沒有辦法取了,那麼肯定是先手在上一局取完了,那麼輸。第二個 1,2 先手輸,先手...

巴什博弈 威佐夫博弈 nim博弈 斐波那契博弈

1.巴什博弈 一堆 n個物品 最多拿m個 最少拿 1個 include int main int argc,char argv return 0 2.威佐夫博弈 兩堆物品 最多拿一堆 最少拿 乙個 include include includeint x sqrt 5 1 2 int main in...