学习笔记 斐波那契博弈
斐波那契博弈
有一堆个数为n的石子,A,B轮流取石子,满足:
(1)先手不能在第一次把所有的石子取完;
(2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间
(包含1和对手刚取的石子数的2倍)
同之前的不同点就是:取的规则动态化
约定取走最后一个石子的就是赢家
就连我看博弈名都知道 这必须要使用斐波那契数列
这里需要借助齐肯多夫定理:(证明自己看)
任何正整数可以表示为若干个不连续的斐波那契数之和
对于所有的正整数适应
首先给出3个定理
1.fibn+1<fibn∗2<fibn+2.fibn+1<fibn∗2<fibn+2这个应该可以明白
fibn+1=fibn+fibn−1fibn+1=fibn+fibn−1
并且fibn>fibn−1fibn>fibn−1
fibn∗2>fibn+1fibn∗2>fibn+1
同理
fibn+2=fibn+fibn+1fibn+2=fibn+fibn+1
并且fibn+1>fibnfibn+1>fibn
所以fibn+2>fibn∗2fibn+2>fibn∗2
2.fibn+2<fibn∗3fibn+2<fibn∗3
fibn+2 fibn+2
=fibn+1+fibn=fibn+1+fibn
=fibn+fibn−1+fibn=fibn+fibn−1+fibn
=fibn∗2+fibn−1=fibn∗2+fibn−1
且fibn−1<fibnfibn−1<fibn
所以fibn+2<fibn∗3fibn+2<fibn∗3
3.3∗fibn+1>4∗fibn3∗fibn+1>4∗fibn
也就是3∗fibn−1>fibn3∗fibn−1>fibn 由定理2 成立
数学归纳法证明:
1.若当前只有一颗也就是i=2i=2 先手只有一颗可取
显然是必败 成立
2.假设所有i<=ki<=k均成立
那么i=k+1i=k+1时 fibi=fibk+fibk−1fibi=fibk+fibk−1
那么把石子分为两堆 fibkfibk以及fibk−1fibk−1
首先 先手绝顶聪明的话取得石子数一定<fibk−1<fibk−1
因为fibk<fibk−1∗2fibk<fibk−1∗2
对于当前小堆fibk−1fibk−1一定可以明白的是
根据假设无论先手如何取 后手总是可以取到最后一颗
分析一下后手最后去了xx颗
若先手第一次取了y>=fibk−13y>=fibk−13
那么剩余小堆<=2y<=2y 后手可以直接取光
x=fibk−1−y<=2∗fibk−13x=fibk−1−y<=2∗fibk−13
我们比较一下2∗fibk−132∗fibk−13以及fibk2fibk2
也就是4∗fibk−14∗fibk−1以及3∗fibk3∗fibk
由定理3可得 后者大于较大
所以先手无法一次性取光fibkfibk这一堆
那么根据之前结论 后手必胜
若先手第一次取了y<fibk−13y<fibk−13
由于fibn+2<3∗fibnfibn+2<3∗fibn
所以y<fibk−3y<fibk−3
那么感性的理解一下 后手总是可以取走一些石子
然后使先手面临fibk−2fibk−2的局面 这样的话后手还是可以取走最后一个
这样的话还是先手必败
所以i=k+1i=k+1时 结论依然成立
不是FibonacciFibonacci数列时 先分解
分解时尽量取较大的FibonacciFibonacci数
例如分解85:
55<=85<=8955<=85<=89所以就是85=55+3085=55+30
以此类推就是85=55+21+8+185=55+21+8+1
n=fibp1+fibp2+fibp3+......+fibpk(p1>p2>p3>......>pk)n=fibp1+fibp2+fibp3+......+fibpk(p1>p2>p3>......>pk)
又因为各个fibfib之间不连续
所以pk−1>pk+1pk−1>pk+1 所以fibpk−1>fibpk∗2fibpk−1>fibpk∗2
先手先取走fibpkfibpk
那么后手只可以取fibpk−1fibpk−1并且不可以取完
那么后手面临这个子问题
fibpk−1fibpk−1并且是后手先取
那么由上可得先手一定可以取走最后一颗
同理对于以后的每一堆都是如此
得证
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用