LeetCode-292. Nim 游戏

这是一个巴什博奕(Bash Game),只要始终保持让对方拿的时候还有(m+1)的倍数个,那么你就胜啦

游戏是这样的:n个物品,每次取1~m个,两个人谁先拿完谁胜

假设:特殊情况是n=m+1,A先拿1~m个怎么都拿不完,但是B怎样都可拿完,A先手必败

一般情况是n=(m+1)*k+s    0<s<=m,如果A拿s个,B拿t个,第一轮结束剩下(m+1)*k-s+s-t=(m+1)*k-t个

这时候,A拿m+1-t个,余下(m+1)*(k-1)个,B拿t个,第二轮结束;第三轮开始A能使得B面临(m+1)的倍数个;最终B只面临m+1个,情况同上,B必输

总结:谁先面临m+1的倍数个谁输,只要拿掉n%(m+1)个就好

class Solution:
    def canWinNim(self, n: int) -> bool:
        return n%4 != 0

下面是一些博弈论的blog 

https://www.cnblogs.com/kls123/p/6970414.html

https://blog.csdn.net/sun897949163/article/details/50609070

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值