51nod 1070 Bash游戏 V4
题意:
有n个石子,先手第一次不能全部取完,a和b轮流操作且每个人取的石子树不超过上一个人取的两倍,谁赢?
知识点:
博弈论,斐波那契博弈
解法:
这是斐波那契博弈的模板题,打表发现当n为斐波那契数的时候b赢,否则a赢。
考虑证明:
假如一个数是斐波那契数,那么它可以写成更小的两个斐波那契数的和,那先手肯定不能将小的那堆取完(取完的话后手可以拿掉大的那一堆,因为斐波那契数列满足下一项小于当前项的两倍)。取一部分的话,后手就把剩下的取掉,仍然留下一个斐波那契数给先手,所以先手必败。
如果不是斐波那契数,由“齐肯多夫定理”(Zeckendorf)可得,每个正整数都可以分解成若干个不连续不同的斐波那契数的和,那么先手第一次取掉最小的那个斐波那契数,因为不连续,所以下一个肯定比当前的两倍要大,所以后手取不完,先手把剩下的那些取了,那么先手必胜。
证毕。