斐波那契博弈

问题描述:一堆石头,两个人先后拿,谁拿到最后一个石头就赢。拿的过程满足以下两个条件:

1、  先手第一次不能全部拿完;

2、  之后每次拿的个数不能至少为1,至多为对手刚取个数的2倍。

 

当n为Fibonacci数时,先手必败。即存在先手的必败态当且仅当石头个数为Fibonacci数。

证明:利用第二数学归纳法。对Fibonacci数列的项进行归纳,其中n=f(m)

         ① 当m=2时,先手必败。结论成立。

         ② 设m=k时,结论成立。当m=k+1时,有f(k+1)=f(k)+f(k-1)。根据归纳可知,在石头数为f(k)和f(k-1)时,后手必赢。

所以后手只需考虑两个问题,一是能否将石头分为这样两堆(先手一次拿完f(k-1)堆时,后手是否能赢);二是后手在f(k-1)堆最后一次拿时,先手是否可能将f(k)堆一次拿完。

考虑,当先手第一次拿了超过f(k-1)个时,由于2*f(k-1)>f(k-1)+f(k-2)=f(k),故后手可以一次拿完剩下的石头。

当先手一次拿了f(k-1)/3个时,后手可以在f(k-1)堆中拿到最大数目的石头数为2*f(k-1)/3,比较2*f(k-1)/3与f(k)/2的大小,做差知道后者大,故先手不能一次取完f(k)堆。

综上,可知后手可以先在f(k-1)堆取到最后一个是石头,接着又能在f(k)中取到最后一个石头。即当m=k+1时,结论成立。

 

当n不为Fibonacci数时,后手必败。证明,需要用到Zeckendorf定理(齐肯多夫定理):任何正整数都可以表示成不连续的Fibonacci数之和。

         令n=f(a1)+f(a2)+…+f(ap),其中a1+2<=a2,a2+2<=a3,…, a(p-1)+2<=ap

因为有2*f(a1)<f(a1)+f(a1+1)=f(a1+2)<=f(a2),故当先手第一次取f(a1)个石头时,后手面对(n为Fibonacci数,后手先取)比败局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值