ICG游戏:斐波那契博弈

描述:

有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下:

1)先手不能在第一次把所有的石子取完,至少取1颗;

2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍;

3)取走最后一个石子的人为赢家。

结论:

如果n为斐波那契数(2,3,5,8,13,21,34,55,89...),则先手必败。

证明一:

如果按原来的套路:

由于局面不仅跟当前剩余数有关,还与上次取的数有关,所以状态中需要考虑能取的数(变得没那么直观)。

必败态:当剩余数为斐波那契数,且不能一次取完时;

    当剩余数不是斐波那契数,但其按Zeckendorf定理分解后,不能一次取完其中最小分解数时。

必胜态:当剩余数不是斐波那契数,且其按Zeckendorf定理分解后,能一次取完其中最小分解数时;

    当能一次取完时剩余数时;

只需证明:

1.必败态任一操作都将转为必胜态;

2.必胜态存在一操作转为必败态;

行但是麻烦,仅与当前局面有关的游戏,用这种分析才方便。

证明二:

当开始是斐波那契数时,用数学归纳法证明必败:

当n=2时,必败;

设当n<=f(k)时,必败;

则当n=f(k + 1)时,有f(k + 1) = f(k) + f(k - 1):

  如果取走数量大于等于f(k -1),则后手可以一次取完,由于f(k) < 2(k - 1)。

  则先手不能一次取完f(k - 1)。根据归纳法的假设,对于f(k - 1),后手必能取得f(k - 1)最后一颗。

此时,还需要证明,先手不能一次取完剩下的f(k):

  易得,先手取的石子数x = f(k - 1) / 3时,后手则取2 * f(k - 1) / 3,为最大。

  (由于后手取石子的最大值函数为max(2x, f(k - 1) - x),两者相等时最大,即x = f(k - 1) / 3)

  此时,先手能取得最大值为2 * (2 * f(k - 1) / 3),即4f(k - 1) / 3,与f(k)相比,做差可知后者大,即一次不能取完,由于假设先手必败。

证毕。

当开始不是斐波那契数列时:

由“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。

则数n可以分解为n1 + n2 + ... + nx,(1...x是下标)每个都是斐波那契数,且没有两个是连续的;

此时,只要取走最小的那个即可。由于n(x - 1)和nx不连续,则易得n(x - 1) > 2nx,即取走最小那个数后,后手不能取完第二小的数。

此时,问题分解为多个小的斐波那契数,且必败态都是对方。

上一篇:51nod Bash游戏(V1,V2,V3,V4(斐波那契博弈))


下一篇:hdu2516-取石子游戏 (斐波那契博弈)【博弈 二分查找】