[COCI2010-2011#4] HRPA
建议直接观看我博客中完整的Fibonacci Nim
显然先手可以第一次直接取完获胜,但大多数情况下这么做并不是最少的。下面我们考虑第一次不取完的情况。
齐肯多夫(Zeckendorf)定理
Wikipedia 中对齐肯多夫定理的描述:
任何正整数都可以表示成若干个不连续的斐波那契数之和。
这种和式称为齐肯多夫表述法。
构造这种和式可以通过每次贪心选出最大的不超过它的斐波那契数。
证明:
-
若正整数
n 为斐波那契数,得证。 -
否则
-
先取
Fib_{t_1} ,其中t1 满足Fib_{t_1} < n < Fib_{t_{1} + 1} 。 -
-
只要证
t_1 ≠ t_2 + 1 。考虑反证法:- 假设
t_1 = t_2 + 1 ,则第一步取出的应当是t_1 + 1 而不是t_1 。原因是Fib_{t_1 + 1} = Fib_{t_1} + Fib_{t_1 - 1} 。
- 假设
-
解题
引理 1
如果正整数
n 为斐波那契数,则先手必败。
证明:
设
-
若第一步取的个数超过
Fib_{t-2} ,则后手可以直接取完剩余石子。 -
否则,该问题变成了一个
n' = Fib_{t-2} 的规模更小的同样的问题。
考虑
引理 2
如果正整数
n 不为斐波那契数,则将其用齐肯多夫表示法表示后,最小的那一堆个数即为答案。
证明:
先手取完最小的那一堆(即