博弈论&SG函数学习笔记(包含nim-k,mulit-nim,anti-nim,阶梯nim变形)

前言

其实有相当大一部分的博弈论都是可以抽象成Nim及其扩展问题的,剩下的小部分结合题目具体分析。

本文主要讨论Nim有关的题目

nim的原型题结论:若$a_1 \ xor \ a_2 \  xor... a_n=0$则先手必败,否则必胜

证明:

终止局面显然满足等式

如果一个局面$a_1 \ xor a_2 \ xor... a_n!=0$,那么无论他改变其中一个$a_i$等于剩下数字的异或和就能满足等式

如果一个局面$a_1 \ xor a_2 \ xor... a_n=0$,那么无论他改变$a_i$中的哪一个都会打破等式

方法1:将题目中的抽象为nim中的石头堆的

有些博弈论题,结合题目中的信息推导一些结论后,可以将原问题抽象为Nim问题

比如【BZOJ2281】【Sdoi2011】黑白棋 将棋子间的间隔抽象为石头堆

有些题目需要借助SG函数来抽象

即,将每一个状态用SG函数值表示出来。

若SG(x)=y,含义就是x可以转移到0~y-1的所有状态(像不像Nim游戏?),若SG(x)=0就说明无法转移,也就是输了。

这样可以将SG函数值本身看作石头堆

然后原问题就转化为了初始状态的SG异或和是否为0

递推解决即可

方法2:Nim游戏的一些变形

nim-k游戏

可以同时取最多k堆石头

结论:若满足:将$a_i$写成二进制,若对于每一个二进制位,所有的$a_i$那一位的1的数量%k=0,则先手必败,否则必胜

证明类比传统Nim游戏

mulit-nim游戏

每次选择一堆石头,将其分裂为几堆更小的。

结论:每堆石头的SG函数的后继集合等于每种分法产生的堆的异或和

即$SG(x)=mex(SG(a_1 xor ..a_{k_1}),SG(b_1 xor .. b_{k_2},...)$

然后递推SG函数求解即可

例题:【bzoj3576】[Hnoi2014]江南乐

anti-nim游戏

最后一个取石头的人输

一个状态为必胜态,当且仅当:(NIM_sum为所有石头数的异或和)

  1)所有堆的石子个数为1,且NIM_sum=0

  2)至少有一堆的石子个数大于1,且 NIM_sum≠0

 

阶梯nim游戏

每次将所取第i堆的石头转移到第i-1堆,到0停止

若所有奇数位的数异或起来,若不为0则必胜

证明:移入偶数堆的石头可以看做是被清除了

如果有人拿出来就再将其丢去下一个偶数堆,对局面不影响

之所以是偶数是因为0是偶数,移入0的石头无法再移出,不再有影响。

然后就是普通的Nim游戏了

 

posted @ 2021-07-22 21:10  linzhuohang  阅读(512)  评论(0编辑  收藏  举报