組合博弈的通解就是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 例如 ...