题目来自《编程之美》一排石头的游戏
N块石头排成一列,每块石头都有自己的固定位置,也就是相当于有自己的编号一样。两个玩家依次取石头,每个玩家每次可以取其中任意一块石头,或者相邻的两块,最后将所有石头取走的玩家赢。
这个游戏有必胜策略吗?
取石子有很多变种,限定取石子的规则,就能产生不同的玩法。这类游戏可以称作博弈。博弈有一个基本概念是必胜状态和必败状态。玩家想赢的话,就必须每次都使自己走完之后,对方处在必败状态。(这里假设游戏双方都是足够聪明的)。
对于博弈类题目,我们一般事先很难看出如何处理,这里有个技巧就是:从最简单的情况开始,逐渐增加游戏的难道,这样看看能不能找出一些规律来。
对于这题,我们从讨论一些简单的特例出发。进而逐渐掌握解题的规律:
(1)当N = 1或者N= 2时, 先手赢。
(2)当N=3时,先手可以取走编号为2的石头,这时,1和3是分开来的,后手无法一次取走,先手赢。
(3)当N=4时,先手取走中间编号为2和3的石头,这就转化为N=3时取走编号为2的石头一样的情况了,先手赢。
(4)当N>4时,我们发现一个对称性规律,先手如果想赢的话,就必须将石头堆转化为对称的两部分,如果N为偶数,取走中间两块,如果N为奇数,取走中间一块,这样就转化 为对称的两部分。这时,先手可以采取策略——学后手走。后手在左边一堆取任意位置的石子,先手则在右边的一堆的石子中采用同样的方式取走相同数量的石头。这样先手 也是必胜。
这样看无论如何先手都是赢的。