組合遊戲(Nim遊戲) SG函式

2021-10-11 01:31:31 字數 1145 閱讀 1859

sg為0的點(必敗點)能到達的肯定都是sg不為0的點(必勝點);

sg不為0的點(必勝點)一定能通過某種方式到達sg為0的點(必敗點)。

組合遊戲典型例題:

給定n堆石子以及乙個由k個不同正整數構成的數字集合s。

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

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

輸入格式

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

第二行包含k個整數,其中第i個整數表示數字集合s中的第i個數si。

第三行包含整數n。

第四行包含n個整數,其中第i個整數表示第i堆石子的數量hi。

輸出格式

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

否則,輸出「no」。

資料範圍

1≤n,k≤100,

1≤si,hi≤10000

輸入樣例:

22 5

32 4 7

輸出樣例:

yes

sg函式模板:

#include

#define endl '\n'

#define inf 0x3f3f3f3f

#define ll long long

#define mod 1000;

using

namespace std;

const

int n =

1e4+10;

int n, m;

int f[n]

, s[n]

, k[n]

;// k是可以取的情況

//例如:輸入 2 5 7

// 3 3 8 2

// k[0] = 5, k[1] = 7.

// s是每堆石子的個數

// f陣列用來儲存sg函式的值,達到記憶化搜尋

intsg

(int x)

for(

int i =0;

; i ++

)//mex過程

}void

solve()

intmain()

nim遊戲和SG函式

1.無法進行任何移動的局面 terminal position 是p position.先手必敗 2.可以移動到p position的是n position.先手必勝 3.所有可行的移動都導致n position的是p position.先手必敗 mex minimal excludant 運算 對...

Nim 遊戲 SG 函式 遊戲的和

nim遊戲是組合遊戲 combinatorial games 的一種,準確來說,屬於 impartial combinatorial games 以下簡稱icg 滿足以下條件的遊戲是icg 可能不太嚴謹 1 有兩名選手 2 兩名選手交替對遊戲進行移動 move 每次一步,選手可以在 一般而言 有限的...

組合遊戲 SG函式和SG定理

在介紹sg函式和sg定理之前我們先介紹介紹必勝點與必敗點吧.必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,...