博弈之sg函式(模板)

2021-06-21 00:55:53 字數 863 閱讀 1646

組合博弈的通解就是sg函式,學習了sg函式之後一直沒有咋用過。

學習博弈的可以在nyoj上面做10道取石子題目,作為了對博弈也就有一定理解了。

用的時候注意初始的時候只要初始sg[0]=0;

其他都通過函式求解。

這裡貼乙個求解sg函式的模板。

int sg[n];

bool hash[n];

void sg_solve(int *s,int t,int n) //n求解範圍 s陣列是可以每次取的值,t是s的長度。

}

用set容器實現的方法,原理一樣。oj上容易超時

void sg_solve()

}

通過一道題目說一下。

hdoj 1536 和pku 2960 

s-nim

題意就是給出乙個陣列s。為每次可以取石子的數目。

然後給你n堆石子每堆si。求解先手能不能贏!標準的sg函式用法題目。

**:#include#include#include #include using namespace std;

const int n = 10008;

int s[108],t;

int sg[n];

bool hash[n];

void sg_solve(int *s,int t,int n) //n求解範圍 s陣列是可以每次取的值,t是s的長度。

}int main()

{ int i,j,n,m,h;

while(scanf("%d",&t),t)

{string ans="";

for(i=0;i

SG博弈函式模板

下面這兩個模版應該就比較嚴密了,這個裡邊的f是從零開始的。出處 1 sg打表 1 f 可以取走的石子個數 2 sg 0 n的sg函式值 3 hash mex 4int f k sg n hash n 5void getsg int n 6中未出現的最小的非負整數 13if hash j 0 17 1...

SG函式模板

首先定義mex minimal excludant 運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex 3 mex 0 mex 0。對於乙個給定的有向無環圖,定義關於圖的每個頂點的sprague grundy函式g如下 g x mex,這裡的g x 即sg x 例如 取石...

SG函式模板

首先定義mex minimal excludant 運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的 非負整數 例如mex 3 mex 0 mex 0。對於乙個給定的有向無環圖,定義關於圖的每個頂點的 sprague grundy函式g如下 g x mex,這裡的g x 即sg x 例如 ...