Fibonacci Game

Fibonacci Game

1 1 2 3 5 8 13 21 34 55 89 144

题目描述:有一堆石子一共n个,两人轮流取。(1)先手不能第一次把石子取完(2)之后的人取石子数量都要介于1~前面那个人取石子的两倍。问先手赢还是后手赢。

证明必败状态:

i=2,先手只能取1颗,先手的必败态。(i代表第i个Fibonacci数,f[i]代表第i个Fibonacci数的值,k也是同理)

假设i<=k成立,则i=k+1时,f[i]=f[k-1]+f[k],如13=5+8;

(1)如果先手取的值大于等于f[k-1],后手可以一次性将f[k]取完。因为2*f[k-1]>f[k],如10>8;

(2)如果先手取少于f[k-1],由假设可预测后手总能取最后一颗。证明如下:如果先手取y,后手取x。设y>=f[k-1]/3,对于k-1这小堆,现在剩下的数量小于等于2*y,后手可以一次将所剩的取完。x=f[k-1]-y,x<=f[k-1]*2/3。那么f[k-1]*2/3和f[k]/2的值谁大呢?也就是4*f[k-1]和3*f[k]的值哪个大?由例子可得20<24(其实可以用数学证明,水平有限,特殊值来验证)也就是x<f[k]/2,后手取完第k-1堆后,先手不能取完f[k],由假设可得,对于第k堆,后手仍能取完最后一颗,后手必胜。

证毕,即对于任意的Fibonacci数,都是一个P态,即先手必败。

证明必胜态:

如果n=85,即不是Fibonacci数,85=55+21+8+1。由Zeckendorf(齐肯多夫)定理知:任何非Fibonacci数总可以由有限多个Fibonacci数组成。n=f[a1]+f[a2]+f[a3]....+f[ap](a1>a2>a3...ap)。令先手将f[ap]取完,a(p-1)>ap+1,例:8>2。f[a(p-1)]>f[ap]*2,后手不能一次将a(p-1)这堆取完,即后手将面临这个a(p-1)堆的子游戏,必败态。后续的每一堆,先手可取该堆的最后一颗。即先手获得最终的胜利。

证毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值