今天我们来玩游戏(博弈)

鸣谢xym学长

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

其实前面的都是废话
精髓都在最后的SG定理中了

很难理解?
那好,我们举个栗子
Nim游戏:
这里写图片描述

其实学长的课件上有写解法,
但是我觉得写得太烂
还是自己说比较清楚

*复杂的情况我们考虑不过来,那就从简单的开始
如果只有一堆,先手必胜(都拿走就好了)

*两堆:
如果有两堆中的石子数目相同,
那么先手从任意一堆中拿走任意数目
后手只要在另一堆中模仿ta的操作,
先手必败

观察一下我们可以发现
如果石子的数目 ^ 和==0,先手必败
!=0, 先手必胜

难道这是巧合吗
当然不是!!!

实际上每堆石子的数目就是当前堆的SG值
(这个怎么理解呢:如果我们从这一堆拿走石子,
我们可以拿1,2,3,4…a[i]个,
接下来的状态就是a[i]-1,a[i]-2,a[i]-3…0,
a[i]是第一个达不到的状态,
卡SG的概念,那么a[i]就是当前堆得SG啦)

我们回顾一下定理
这里写图片描述

那我们照葫芦画瓢,异或一下,
设答案为k

如果k==0那么先手必败
(极端考虑两堆数目相同的石子)

如果k!=0先手必胜
原因:k!=0,那k二进制表示一定有一个最高位j是1
在所有石子中一定有一堆j位也是1(不然k中的1是怎么来的。。。),设为第i堆
那先手把i堆的石子拿成a[i]^k,
这样剩下的所有石子堆异或和就==0了,
这就相当于个对手留下了一个必败局面
此时先手必胜

tip

在一般的博弈中
sg函数可以暴力求得,(卡住sg的定义)
暴力枚举后继状态,求mex
整个游戏的sg就是求一下子游戏的sg异或和即可

一般规定
sg==0,先手必败
否则先手必胜

转载于:https://www.cnblogs.com/wutongtong3117/p/7673410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值