取石子遊戲,程式設計師用博弈論教你如何必勝

2021-10-22 12:31:47 字數 1634 閱讀 2533

有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子(至少取1個)。

每次有兩種不同的取法,規則如下:

1.一是可以在任意的一堆中取走任意多的石子;

最好的策略,給定初始數量,你是否有必勝的把握?

為方便描述,設表示兩堆石子數量分別為,且你先取。

1.表示必勝

2.表示必敗

3.石堆沒有順序優先順序,所以

2.1首先分析3種特殊情況

1.兩堆石子數量一樣,兩堆都取個,必勝,得

奇異局勢(必敗局勢)。

2.2列出前面的幾種情況如下:

可以得到如下規律:

即奇異局勢為,且

結論:如果兩個人都採取最優策略,面對非奇異局勢,先拿必勝;面對奇異局勢,後拿必勝。

這個其實是經典的威佐夫博弈問題,但首先我們先介紹另乙個定理,貝蒂定理。

3.1貝蒂定理

設是正無理數,且。

記,(為取整函式)。

則是的乙個劃分,。

證明如下

1.任乙個整數至多在集合p或q**現一次。

,對於不同整數各不相同。

2.(反證法)

假設,則存在正整數使得,即,,

兩式相加得

,與為整數矛盾。

3.(反證法)

假設, 則存在正整數使得,

由此得(因為a是無理數),

類似有,

兩式相加得

,與為整數矛盾。

3.2回歸威佐夫問題

設奇異局勢構成的序列組為,即為通項公式,可以看出是乙個貝蒂序列。

設,因為,即。

代入,得。

即。而。

3.3如何快速判斷

給定乙個局勢,得,

如果,則是奇異局勢,否則不是。

3.4例題

poj1067:

3.5**實現

取石子 博弈論 Nim遊戲

題目大意 有n堆石子,第i堆有ai個。每次可以選擇乙個x,選擇乙個質數p滿足p x,選擇乙個0 y a x 然後將y個石子從x移動到x p。問先手有多少種第一步移動的測率能夠必勝?答案除以總方案數輸出。n 106,0 ai 109n 10 6,0 ai 10 9題解 從最簡單的情況推導,什麼情況下是...

HDU 2516 取石子遊戲 (博弈論)

problem description 1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,但不能全部取完.以後每次取的石子數不能超過上次取子數的2倍。取完者勝.先取者負輸出 second win 先取者勝輸出 first win input 輸入有多組.每組第1行是2 n 2 31.n 0退出...

博弈論 取石子遊戲 HDU 2516

題解 列舉一下從1到13左右會發現如果當前是斐波那契數必輸 n 2時輸出second n 3時也是輸出second n 4時,第乙個人想獲勝就必須先拿1個,這時剩餘的石子數為3,此時無論第二個人如何取,第乙個人都能贏,輸出first n 5時,first不可能獲勝,因為他取2時,second直接取掉...