f[i]表示狀態i的後繼狀態,把它的後繼狀態push_back()進去,然後呼叫getsg()就可以得到sg函式。無法轉移的狀態都是失敗狀態,這種寫法貌似只能向標號更小的狀態轉移(本身這個圖就是dag,就有拓撲序,所以本質上無所謂,更何況取石子非常直觀),所以一般f[0]就是失敗狀態。當然也可能會有別的失敗狀態。
多個公平組合遊戲的和,只需要把他們分別的sg函式求出來然後求個異或和即可。
vectorf[1005];
int sg[1005], s[1005];
int getsg() }}
return sg[n];
}
模板 數學 博弈論
1.要從必勝或必敗的局面反推 2.sg函式 只要當前狀態可以轉移到的狀態中有乙個是敗態,那麼當前狀態就是勝態。勝態為n。如果當前狀態可以轉移到的所有狀態都是勝態,那麼當前狀態就是敗態。敗態為p。sg函式為每個狀態賦乙個自然數的值,這個值為除這個狀態的後繼外的最小自然數。首先定義mex minimal...
博弈論 (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堆及以後石子裡取任意顆 這時看上去問題複雜了很多,但相信你如果掌握了本節的內容,類似的千變萬化的問題都是不成問題的。現在我們來研究乙個看上去似乎更為一般的遊戲 給定乙個有向無環圖和乙個起始頂點上的一枚棋子,兩...