博弈論 台階Nim遊戲

2021-10-03 12:47:48 字數 1195 閱讀 9813

現在,有乙個nn級台階的樓梯,每級台階上都有若干個石子,其中第ii級台階上有aiai個石子(i≥1i≥1)。

兩位玩家輪流操作,每次操作可以從任意一級台階上拿若干個石子放到下一級台階中(不能不拿)。

已經拿到地面上的石子不能再拿,最後無法進行操作的人視為失敗。

問如果兩人都採用最優策略,先手是否必勝。

根據樣例對問題分析:

給定n堆物品,第i堆物品有ai個。兩名玩家輪流行動,每次可以任選一堆,取走任意多個物品,可把一堆取光,但不能不取。取走最後一件物品者獲勝。兩人都採取最優策略,問先手是否必勝。

我們把這種遊戲稱為nim博弈。把遊戲過程中面臨的狀態稱為局面。整局遊戲第乙個行動的稱為先手,第二個行動的稱為後手。若在某一局面下無論採取何種行動,都會輸掉遊戲,則稱該局面必敗。

所謂採取最優策略是指,若在某一局面下存在某種行動,使得行動後對面面臨必敗局面,則優先採取該行動。同時,這樣的局面被稱為必勝。我們討論的博弈問題一般都只考慮理想情況,即兩人均無失誤,都採取最優策略行動時遊戲的結果。

nim博弈不存在平局,只有先手必勝和先手必敗兩種情況。

定理: nim博弈先手必勝,當且僅當 a1 ^ a2 ^ … ^ an != 0

方法:找奇數台階,如果奇數台階異或!=0,則勝利。

充要條件:所有奇數級台階所有石子異或起來不等於0.

輸入格式

第一行包含整數nn。

第二行包含nn個整數,其中第ii個整數表示第ii級台階上的石子數aiai。

輸出格式

如果先手方必勝,則輸出「yes」。

否則,輸出「no」。

資料範圍

1≤n≤1051≤n≤105,

1≤ai≤1091≤ai≤109

輸入樣例:

3

2 1 3

輸出樣例:

yes
#include #include using namespace std;

int main()

if (res) puts("yes");

else puts("no");

return 0;

}

博弈論 Nim遊戲

這種遊戲稱為nim博弈,遊戲過程中面臨的狀態成為局面。n im nimni m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim 博弈先手 必勝,當 且僅當a 1xora2 xor xoran 0nim博弈先手必勝,當且僅當 a 1 texta 2 text cdots text a n n...

博弈論(一) Nim遊戲

重點結論 對於乙個nim遊戲的局面 a1,a2,an 它是p position當且僅當a1 a2 an 0,其中 表示位異或 xor 運算。nim遊戲是博弈論中最經典的模型 之一?它又有著十分簡單的規則和無比優美的結論,由這個遊戲開始了解博弈論恐怕是最合適不過了。nim遊戲是組合遊戲 combina...

博弈論之Nim遊戲

二 nim遊戲的定義 三 過程例項 四 分析 3.bouton s theorem 五 例題 nim遊戲是博弈論中最經典的模型 之一 它又有著十分簡單的規則和無比優美的結論 nim遊戲是組合遊戲 combinatorial games 的一種,準確來說,屬於 impartial combinator...