巴什博弈

leetcode NimGame

水题水出了自己不会的东西。。。
题目只要了解了巴什博弈就很简单,侮辱智商对吧,,那这里补下个人理解的巴什博弈论

设石头数为n,最多可以拿的数量为m,先了解,如果给对方留下m+1数量的石头,对方就不可能赢了,这个是简单模拟出来的。

然后推广出 只要给对方留下m+1的倍数,对方就不可能赢
假设给予对方的石头数n = (m+1)* k; 对方可以取的数为k,
(k >=1, k <=m)
,那么我只需取(m+1) - k (此项一定大于0) 然后对方剩下石头数n = (m+1)*(k-1)
以此类推, 对方的石头数最后一定为m+1,由上方结论得出,对方并不可能赢

回到题目,只有两个可能的石头数
(1)n = (m+1)* k
(2) n = (m+1)* k + s (s<=m)

第一种情况先手方必输,因为给自己留下了(m+1)倍数的石头
第二种情况先手方必赢,因为只要取出s个石头,就给对方留下了(m+1)的石头数

public static boolean canWinNim(int n) {
     return n%4!=0;
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值