可参考:张一飞《由感性认识到理性认识——透析一类搏弈游戏的解答过程》以及 王晓珂《解析一类组合游戏》)
例一、有两个选手A,B,桌上有21个石子,两人轮流拿走1-3个石子,A选手开始拿,拿到最后一个石子的人赢。
分析:逐个观察找规律0,1,2,3,4,5,6,7,8,……
组合游戏的模型:
(1)两个选手。
(2)存在一个状态的集合。
(3)规则确定了每个选手在每个状态转向的其他状态。规则可能对不同选手不一样。
(4)选手轮流进行操作。
(5)不能进行操作时,游戏结束,当前不能进行操作者输。
(6)游戏会在有限步之内结束(没有平局)。
有向图模型 G=(X,F) X游戏的状态集合,F(X)为X可以到达的状态集合。无环图(无平局)
分析此模型的方法
基本概念
P-Positions:Positions are winning for Previous player. (必败状态)
上例中 0,4,8……
N-Positions:Positions are winning for Next player. (必胜状态)
上例中 1,2,3……
Terminal Position(结束状态)上例中 0
解决步骤
(1)把结束状态标记为必败状态。
(2)能够通过一步操作到必败状态的状态标记为必胜状态。
(3)一步操作后到达的都是必胜状态的状态标记为必败状态。
(4)如果在第三步中找不到新的必败状态,则停止,否则转向操作(2)
例一中:
0 1 2 3 4 5 6 7 8 9 10 ……
P N N N P N N N P N N
练练手(熟悉P,N状态)
1.用S表示一个正整数集合,每次选手只能拿走s (属于S)个石子,求必胜状态。
S={1,2,3,4,5,6}
S={1,3,6}
S={1,2,4,8,16……,2^n}
2 Empty and Divide
3 POJ 2234 1082 2505
*4 Dynamic subtraction/Zeckend Theorem(和二进制,fibonacci 表示有关)
例二 (NIM)有三堆石子(x1,x2,x3),选手轮流取,选手每次选一堆石子,至少取一个至多全取掉,谁取到最后一个为赢者。
分析观察:(0,0,x) (0,x,x)……
定理一、(x1,x2,x3……,x^n)是必败局面仅当x1^x2^x3……^xn=0.
理解(1)0^0^…^0=0 (2)P一定到N (3) N可以到P
练练手(熟悉模型转化)
1.Nimble(Poj 2960 S-Nim)
2.Turning Turtles
3.StairCase Nim (Poj 1704 Georgia and Bob Poi Game)
例三 Graph Games
模型定义:(X,F)X表示状态,F表示转移函数。
(1)选手一从x0开始
(2)选手轮流操作
(3)在状态x可以选择到状态y(y属于F(x))
(4)无法进行操作者输
为保证无平局,我们让图中无环
分析解决办法
重点 Sprague-Grundy 函数
g (X)= min{n| n∈N ,n≠ for y∈F(x)}
g (X)=0当且仅当X为必败状态,这用其定义很容易验证:
1) 当X为结束状态时,由于g (X)=0它是必败状态。
2) 当X不是结束状态时,如果它能到达必败状态,那么g (X)>0,X是必胜状态。
3) 如果X不是结束状态且它到达的所有状态未必败状态,那么g (X)=0它是必败状态。
这样我们通过g (X)值就可判断状态X是否必败。
例子:Excise1
Sprague-Grundy Theorem:(局面分解)
对于G=G1+G2+ … … Gn
G(X1,X2,… …Xn) =G1(X1) XOR G2 (X2) … …Gn(Xn)
练练手
2425 A Chess Game
其他题目:二维硬币 POI GAME 1740A NEW GAME POJ 2975 NIM
还有很多模型,需要好好研究。
(转载:http://hi.baidu.com/5l2_/blog/item/19f2cbd92d28c22910df9b41.html)