博弈论学习记录

麻了,要是在考省赛之前看一看的话,包能写出来的,还不用浪费那么多时间

题目见acwing基础课

首先是Nim游戏

如果有两个石子堆,当两个堆石子数相同时,先手拿什么,后手跟着做,先手必输的,那么如果不同,先手先操作一下,让两堆相同,那就相当于他才是相同情况下的后手,必胜

石子堆的证明有点麻烦了,最终结论就是几堆石子的异或值不等于0,就是先手胜,等于0就是后手胜,二进制之后就是每一位上的1组合或不组合都算一种拿的方式,根据某个我不想多说的证明,如果几个值的异或值=x≠0,那么一定存在某个值a在x的最高位的那一位的值也是1,再根据另一个我不想多说的证明,把a-x的话,之后就是异或值为0。反正异或值为0的话,说明,每一位为1的都有偶数个,那就可以镜像照做了,这里还有一个拿走的x一定比那一堆个数小的证明,不多说。

然后就是集合Nim函数

这个就比较难理解了

首先是Mex运算:设S表示一个非负数集合,定义mex(S),为求出不属于集合S的最小非负数的运算

这个很关键

sg(x)=mex(sg(y1),y(2),....sg(yn)) y1....yn是对局面x进行操作所能达成的局面

就有张图,x到y1,y2...那种的,y又能到什么什么

sg(终点)=0

sg≠ 0的情况

那下一步就一定能到0,那我操作一下,你没得走了,我必赢

sg(x)=0 有哪几种情况呢

一种是终点,那确实哪里都到不了

另一种是下一步到不了0的,但又能到其他点,那我不能不干,干了到不等于0,那你操作一下我迟早要到终点,我必输

所以sg=0,必胜 sg≠0,必输

假设有好几张图

那每个起点都有一个sg值,根据mex的定义,比sg值小的值都是能一步能进入的局面,那你看,是不是就是随便拿的石子堆嘛,那就几个局面就是几个石子堆,能直接用Nim的结论

所以解法就是算每个的sg之后直接异或

台阶Nim

偶数上不用管,因为对手要是动偶数上的石子,你下一步再把那个挪到下一个偶数就行,最多到地面,每回合下来奇数台阶上的是不会变的

然后就是动奇数了,奇数台阶上的动了,就和进地面差不多了,只要你不蠢,那不就是每个奇数台阶都是一个石子堆,就是经典Nim游戏

拆分Nim

sg(a1)=sg(b1,b2)=sg(b1) xor sg(b2)

一堆换两堆

按之前那个,只是sg的算法变了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值