关于博弈论的问题

对于博弈论的问题

我们先考虑自己总结的两类简单问题:

1.如果是1堆,A,B两个人开始取,每次能取的数目为1~m,那么我作为A先手,要保证赢的话,我该怎么取。

这样的问题,因为每次能保证两人取到的和(m+1)固定,因此我先手的情况下,我要考虑取1次后,当前n能够被(m+1)整除,这样的话我一定能够获胜。因此,一般会问两种:判断我能否赢或者我该怎么赢,我直接n%(m+1),如果有余数,那么我直接取余数我就一定赢;如果余数为0,判断我先手一定能赢。

2.如果是n堆,例如是3堆,每堆是10个,并且我先手的情况下,我能最多取其中的一堆,并且同时只能在一堆当中取,要怎样保证我能赢。

这样的问题,我们首先要明白一点,但凡是a1^a2^a3^……^an=0的情况,后手的人一定赢,因此我要做的就是怎么样取一次,保证剩下的所有异或和为0。那么就要考虑二进制,比如题目所给,三个都是1010,要保证异或为0,在第1为以及第3为不行,需要转化为0,那么我们就考虑在最高位需要改变的那堆里进行取值,此时1010-0000(目标)=1010,也就是10,因此我们需要在一堆中取10,这样的话我们就能保证开始提到的,异或为0且我们是后手进行,必赢。

那么再推广一下,如果是10,11,12的三堆呢,同样的,转化为二进制,1010,1011,1100,那么我们看到,在第二位以及最后以为是不满足要求的,我们需要在最高位需要改变的那堆中进行修改,因此也就是12的那堆中,我们的目标是变为0001,因此我们需要拿走的就是1100-0001也就是11个。

关于具体的其他变种问题,以及较为详细的证明,需要用到SG函数的概念,可以看下面的博客:

https://blog.csdn.net/A_Comme_Amour/article/details/79347291

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值