博弈論 集合 Nim遊戲

2021-10-03 12:51:54 字數 1906 閱讀 2602

mex運算

設s表示乙個非負整數集合。定義mex(s)為求出不屬於集合s的最小非負整數的運算,即:找到集合當中不存在的最小自然數

mex(s) = min, x屬於自然數,且x不屬於s

sg函式

在有向圖遊戲中,對於每個節點x,設從x出發共有k條有向邊,分別到達節點y1, y2, …, yk,定義sg(x)為x的後繼節點y1, y2, …, yk 的sg函式值構成的集合再執行mex(s)運算的結果,即:

sg(x) = mex()

特別地,整個有向圖遊戲g的sg函式值被定義為有向圖遊戲起點s的sg函式值,即sg(g) = sg(s)。sg(終點)=0,存在y1, y2, ... ,yn的局面:

這裡面不存在的最小自然數。如下圖所示,圖的最後乙個點(第二條路徑)即終點定義為0,終點前乙個點不存在最小自然數則為1,往後乙個數不存在最小自然數除了0和1,那麼就是2了,如此遞推,最開始那個不存在最小自然數為3。

結論:sg = 0,必敗,sg != 0必敗。

定理

有向圖遊戲的某個局面必勝,當且僅當該局面對應節點的sg函式值大於0。

有向圖遊戲的某個局面必敗,當且僅當該局面對應節點的sg函式值等於0。

給定nn堆石子以及乙個由kk個不同正整數構成的數字集合ss。

現在有兩位玩家輪流操作,每次操作可以從任意一堆石子中拿取石子,每次拿取的石子數量必須包含於集合ss,最後無法進行操作的人視為失敗。

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

輸入格式

第一行包含整數kk,表示數字集合ss中數字的個數。

第二行包含kk個整數,其中第ii個整數表示數字集合ss中的第ii個數sisi。

第三行包含整數nn。

第四行包含nn個整數,其中第ii個整數表示第ii堆石子的數量hihi。

輸出格式

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

否則,輸出「no」。

資料範圍

1≤n,k≤1001≤n,k≤100,

1≤si,hi≤100001≤si,hi≤10000

輸入樣例:

2

2 53

2 4 7

輸出樣例:

yes
分析:根據例子畫出有向圖得到初始狀態sg的值

int s[n], f[m];//s表示誰的個數,f表示sg的值

//求sg

int sg(int x)

//判斷當前集合當中不存在的點

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

if (!s.count(i))//如果當前數不存在,當前的值就是i

return f[x] = i;

}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...