Bashgame,Wythoffgame,Nimmgame都是ICG游戏的一种即:
1.游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己最有利。
2.当有一人无法做出决策时游戏结束,无法做出决策的人输。无论二者如何做出决策,游戏可以在有限步内结束。
3.游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关。
总的来说就是两个人做选择,每轮一个人选择一次(固定顺序),最后谁先选择不了就失败
必胜态与必败态
定义P-position与N-position
P-position:必败态(简记为P
),即Previous-position,你可以直观的认为处于这种状态的人一定会输
N-position:必胜态(简记为N
),即Next-position,你可以直观的理解为处于这种状态的人一定会赢
这仅仅是最直观的定义
更严谨的定义为:
1,无法移动的状态(即terminal-position)为P
2,可以移动到P的局面为N
3,所有移动都会进入N的局面为P
SG函数
1,SG() = 0 是必败态,SG() != 0是必胜态
2,SG(x) = n 表示 x 有 n 种到达SG() != 0 的点的情况
mex()的定义:一个集合中未出现的最小非负整数。例如mex({0,2,3}) = 1;
而SG函数的重要定义是:SG(x) = mex(SG(y1),SG(y2),……)(yi是所有的x的后继节点的集合)
{ 如果没有后继则:SG(x) = 0;(其实不用管,对空集合求mex就是0)}
通过这样就可以求出SG是否为0,如果为0就是必败态
上图可以简单看出取石头时不同N的SG函数值
构建SG函数步骤:
1,将后续可能的情况加入set中;
(一共有一堆石子,一次拿1-3个,当还剩7个石子时就行该加入{SG(4),SG(5),SG(6)})
2,将mex(set<>)存入数组dp中
3,dp中就是SG的结果