关于Fibonacci博弈的一些学习
来源:互联网 发布:软件开发行业市场前景 编辑:程序博客网 时间:2024/06/16 05:27
关于Fibonacci博弈的一些学习
一道例题
问题
给定
n(n≥2) 个石头,游戏双方轮流取至少一个石子,取到最后一个石子的人算赢,但是要满足一下规则:
- 第一次取不能全部取完所有的石子。
设前一次取的石子数为
m ,这次取的石子的数量不能超过2m 。问先手是否有必胜策略。
分析
当时看到这道题(当时看的还是加强版)的时候第一反应是设计DP。
计
然而这样显然是不能通过本题的,因为数据范围比较大。
这里引(bai)入(du)一个结论:
如果
n 是一个斐波那契数,那么一定是必败态(与上限无关,只要不能直接全部取完)。
我们来考虑用数学归纳法来证明:
我们设
当
当
根据Fibonacci数列的定义:
设先手取的石子数为
我们分两种情况来讨论:
若
x<fibk−1 那么此时我们就可以先递归到
k−1 的时候去考虑,因为我们之前假设过
i≤k 时都成立,所以此时后手肯定可以取到
k−1 的最后一个石子。然后此时就剩下了
fibk 堆石子。此时只要证明不论在
k−1 那堆里面怎么取,取到k 那堆时的上限都不会超过fibk 。(这样子的话情况就可以变为k堆的情况,由于前面我们的假设所以它就是成立的。)我们使用反证法来证明。
我们先假设存在一种情况使得后手取完
k−1 堆里的最后一个石子之后,先手可以一次性取完k 堆里的所有石子。那么我们设后手在
k−1 里的最后一次取完时的数量为y 。y 要满足的条件是y≥fibk2 。剩下的那一堆的数量为
fibk−1−y 。要使得y 尽可能地大,前一次取的石子也得尽可能地大,所以我们假设剩下的全取。那么就得满足y≤2(fibk−1−y) (游戏规则)。将上面那个式子拆开:
y≤2fibk−1−2y , 移项:y≤23fibk−1 。联立上面的两个不等式:
{y≥fibk2y≤23fibk−1 所以只要证不存在这样的
y ,即23fibk−1<fibk2 。继续化简:
fibk>43fibk−1 把
fibk 拆掉然后再把fibk−1 移过去:fibk−2>13fibk−1 上面那个式子可能再用个归纳法什么的应该能证吧。。。由于篇(懒)幅(癌)问(发)题(作)我就不具体证明了。。。(其实大家写几项应该也能看的出来吧)
假装我们证完了上面那个式子以后,那么原命题也就得证了。若
x≥fibk−1 那么后手就可以直接取完。考虑证明:
我们要证的是:
2x≥fibk 。只要证:
2fibk−1≥fibk (进行一些放缩)只要证:
fibk−1≥fibk−2 ∵Fibonacci数列是一个递增的数列 ∴fibk−1≥fibk−2 以上步步可逆,所以原命题得证。
综上所述,当
那么对于不是
“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。
具体地来说,就是对于一个不是
打个比方,
所以先手可以先把最小的那一堆全部取掉,
所以对于每一堆来说都是完全独立的游戏,并且对于后手来说都是必败态。所以先手必胜。
所以,当
- 关于Fibonacci博弈的一些学习
- 关于一些博弈的模型总结,巴什博奕+威佐夫博奕+尼姆博奕+Fibonacci博弈+公平组合博弈。把网上 的一些资料总结了一下
- Fibonacci博弈的证明
- 威佐夫博弈 && Fibonacci博弈
- 关于Fibonacci的实现
- 关于博弈的思考
- ZOJ 2290 博弈 Fibonacci
- 关于学习的一些建议
- 关于Attribute的一些学习
- 关于学习的一些思考
- 关于TextView的一些学习
- 关于学习的一些想法
- 关于学习的一些思考
- 关于浮动的一些学习
- 关于 explicit 的一些学习
- 关于学习的一些思考
- 关于学习的一些思考
- 关于DialogFragment的一些学习
- Viewpager的无限轮播!!!
- java 面向对象
- ios view的形变
- Mysql创建方法语法
- 不要用子类!Swift的核心是面向协议
- 关于Fibonacci博弈的一些学习
- [PlantSimulation]User Interface应用(二)
- linux 并发 同步
- 物联网技术入门——系列文章3
- 引入布局
- 【TV Picture Quality
- 文件初接触
- anroid边框阴影-圆角阴影-渐变阴影
- 二分查找