游戏描述:

Fibonacci Nim是Nim游戏的变种,其规则为两名玩家从一堆硬币中交替移除硬币,第一步中,不允许玩家拿走所有硬币,也不允许不取,并且在每次后续移动中,移除的硬币数量最多可以是上一次移除数量的两倍,拿走最后一枚硬币的玩家获胜或者失败,如果判失败,只要第一个人取走\(n-1\)个硬币就必胜

结论

如果双方足够聪明,只要开局硬币数量不是斐波那契数,那么当\(n\)为斐波那契数的时候先手必败(即后手必胜)

证明

如果硬币数量是斐波那契数,设该数为\(F(k+2)\),有\(F(k+2)=F(k+1)+F(k)\),可以将硬币看作两堆\(F(k+1)\)和\(F(k)\),如果先手取走\(F(k)\)及以上,那么后手必胜,(毕竟\(F(k+1)<2*F(k)\)),那么先手只能在\(F(k)\)的一堆中取硬币,就是上一个问题的子问题,那么后手也肯定能取走该堆最后一枚硬币,那么剩下的一堆硬币也可以如此拆分,那么如此先手必败。如果硬币数量不是斐波那契数,根据Zeckendorf定理(齐肯多夫定理),正整数都可以表示成若干个不连续的斐波那契数之和。那么我们可以将硬币数\(n\)表示为\(n=F(a_1)+F(a_2)+.....F(a_n)\),\((a_1>a_2>.....a_3)\),先手可以先取完最小的一堆,由于各个斐波那契数不连续,即有\(F(a_{i-1})>2F(a_i)\),后手肯定取不完剩下的最少的一堆硬币,此时相当于后手面对该游戏的必败态,对于以后的每一堆,先手都能取到这一堆的最后一枚硬币从而获胜

Fibonacci Nim(斐波那契尼姆)游戏的更多相关文章

  1. 10、end关键字和Fibonacci series: 斐波纳契数列

    # Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 #复合赋值表达式,a,b同时赋值0和1 while b < 10: print(b ...

  2. [LeetCode] Fibonacci Number 斐波那契数字

    The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...

  3. fibonacci数列-斐波那契数列-python编程

    未完待续~ 了解fibonacci数列: 斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610 ...

  4. Fibonacci series(斐波纳契数列)的几种常见实现方式

    费波那契数列的定义: 费波那契数列(意大利语:Successione di Fibonacci),又译费波拿契数.斐波那契数列.斐波那契数列.黄金切割数列. 在数学上,费波那契数列是以递归的方法来定义 ...

  5. 【算法】Fibonacci(斐波那契数列)相关问题

    一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...

  6. POJ 3070 Fibonacci【斐波那契数列/矩阵快速幂】

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17171   Accepted: 11999 Descr ...

  7. [Amazon] Program for Fibonacci numbers 斐波那契数列

    The Fibonacci numbers are the numbers in the following integer sequence. 0, 1, 1, 2, 3, 5, 8, 13, 21 ...

  8. Computational Complexity of Fibonacci Sequence / 斐波那契数列的时空复杂度

    Fibonacci Sequence 维基百科 \(F(n) = F(n-1)+F(n-2)\),其中 \(F(0)=0, F(1)=1\),即该数列由 0 和 1 开始,之后的数字由相邻的前两项相加 ...

  9. 在sqlserver中做fibonacci(斐波那契)规律运算

    --利用sqlserver来运算斐波那契规律 --利用事物与存储过程 declare @number intdeclare @A intdeclare @B intdeclare @C int set ...

随机推荐

  1. 第二阶段:4.商业需求文档MRD:3.PRD-页面结构图

    这也是功能结构以及优先级 这是页面层级 页面结构图 再细分某一个频道或者子页面 层层细分 用mind做的页面结构图 里面也包含了功能

  2. hadoop中 namenode的持久化

    一.为什么namenode持久化 namenode通过内存存储hdfs集群的元数据(目录结构 文件信息 块对应关系),如果内存出现问题,那么会数据丢失,需要通过持久化,把内存中的数据定期的存储在硬盘中 ...

  3. F#周报2019年第51&52期

    新闻 介绍DataFrame 介绍System.Threading.Channels ConfigureAwait常见问题 第三次年度C#降临节 .NET会议--2020年1月14日 如何找到F#的工 ...

  4. 远程管理服务器--批量管理服务器,vps

    一般大型的企事业单位都有自己的服务器,但是服务器一般都放在机房,辐射较大,噪音大,如何能有效的避免这一情况呢?哈哈,那就来个远程桌面,远程操作服务器吧. 一.使用 iis7远程连接管理工具工具下载官网 ...

  5. spinor/spinand flash之高频通信延迟采样

    SPI协议 对于spinor和spinand flash,其通信总线为SPI总线. SPI有四种工作模式,对应不同的极性和相位组合 极性,一般表示为CPOL(Clock POLarity),即SPI空 ...

  6. 26.python操作Excel

    写入Excel import xlwt book=xlwt.Workbook(encoding='utf-8') sheet=book.add_sheet('xiangxin') # 标题名 titl ...

  7. redis 为什么是单线程,为什么速度快。

    redis 5中存储方式 String.List.Set.Hash.ZSet这5种 数据库的工作模式按存储方式可分为: 硬盘数据库和内存数据库.Redis 将数据储存在内存里面,读写数据的时候都不会受 ...

  8. 负载均衡之ribbon

    一.什么是负载均衡? 做web开发都会接触到负载均衡,这里我们就不细说了. (摘自百度百科)负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡.分摊到多个操作单元上进 ...

  9. python之字符串的简单应用

    1.实现5+7加法运算 value = input(">>>") v1, v2 = value.split('+') c1 = int(v1) c2 = int( ...

  10. Qt中设置窗口图标

    转:https://blog.csdn.net/weiren2006/article/details/7438028 1.通过qtcreator新建一个文件filename.qrc,将图片添加到fil ...