Nim问题和阶梯Nim(staircase nim)

Nim问题和阶梯Nim(staircase nim)

Nim问题:
有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。

也可以说有 N 堆石子,第 i 堆有 A[i] 个石子,两个人轮流取,每次至少取 1 个石子,最多把该堆石子都取完(假设两个人都足够聪明)。

现在需要求的是谁先手的那一方能不能赢得比赛。

这个问题如果自己慢慢想的话是很难想出一个结果来的,这里直接给出结论,具体的证明过程不用深究。

res = A[0] ^ A[1] ^ A[2] …… A[n]

把每一堆石子的数量进行异或操作,得到结果 res。

若 res != 0,则先手必胜;

若 res == 0,则先手必败;

考虑必胜的局面,就是当先手面对只有一堆石子的情况,这个时候直接全部取走就可以获胜,

而这种情况 res 一定满足 res != 0。

并且在异或操作中只需要一步就可以把 res != 0 的情况转化成 res == 0 的情况。

因此如果先手面对的局面 res != 0 的话,他就可以一步取走某个数量的石子,

将 res == 0 的局面对给对方。

而在 res == 0 的局面下,不管如何取石子,都会破坏这个局面成为 res != 0 的情况。

先手方下回合继续执行上面的步骤即可,这样最终就可以获得游戏胜利。

阶梯Nim问题:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值