sg函式的定義:
g(x) = mex ( sg(y) |y是x的後繼結點 )
其中mex(x)(x是乙個自然是集合)函式是x關於自然數集合的補集中的最小值,比如x= 則mex(x)=3;
什麼是後繼結點?
所謂後繼結點就是當前結點經過乙個操作可以變成的狀態。比如對於娶4石子遊戲,假如每次可以取的數目是1,2,4,當前的石子數目也就是當前狀態是5,那麼5的後繼結點就是=;
如果5的三個後繼結點的sg函式值分別為0,1,3,那麼5的sg值就是集合的補集的最小元素,也就是2。
關於整個遊戲的sg值之和sum,定義sum=sg1 ^ sg2 ^ sg3 ^ ……sgn. 其中^表示按位異或運算。
結論:乙個遊戲的初始局面是必敗態當且僅當sum=0。
一篇非常好的關於sg值的**:
sg值打表模板:
//f:可以取走的石子個數
//sg:0~n的sg函式值
//hash:mex{}
int f[n],sg[n],hash[n];
void getsg(int n)
中未出現的最小的非負整數}}
}
hdu1848
題意:取石子問題,
一共有3堆石子
,每次只能取斐波那契數個石子,先取完石子者勝利,問先手勝還是後手勝
可選步數為一系列不連續的數,用getsg(計算)
最終結果是所有sg值異或的結果
#include#include#includeusing namespace std;
const int maxn=1001;
//f 可以取走的石子數
//sg 0~n的sg函式值
//hash mex{}
int f[maxn],sg[maxn],hash[maxn];
void getsg(int n)}}
}int main()
return 0;
}
博弈論 (SG函式)
首先定義mex minimal excludant 運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex 3 mex 0 mex 0。對於乙個給定的有向無環圖,定義關於圖的每個頂點的sprague grundy函式g如下 g x mex,這裡的g x 即sg x 例如 取石...
博弈論SG函式
有n堆石子,每次可以從第1堆石子裡取1顆 2顆或3顆,可以從第2堆石子裡取奇數顆,可以從第3堆及以後石子裡取任意顆 這時看上去問題複雜了很多,但相信你如果掌握了本節的內容,類似的千變萬化的問題都是不成問題的。現在我們來研究乙個看上去似乎更為一般的遊戲 給定乙個有向無環圖和乙個起始頂點上的一枚棋子,兩...
博弈論 SG函式
學習博弈論不得不提一哈sg函式 關於sg函式的一些概念就不多說了 說下我自己的理解sg函式記錄為0的是p狀態 不為0記錄的是n狀態 相當於有個週期再迴圈 p n狀態輪番出現 sg模板 include include include define maxn 1000 using namespace s...