斐波纳契博弈:

有一堆个数为n的石子,游戏双方轮流取石子,满足:

1)先手不能在第一次把所有的石子取完;

2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。

约定取走最后一个石子的人为赢家,求必败态。

证明 FBI数为必败局:

1.对于任意一个FBI数 FBI[K]=FBI[K-1]+FBI[K-2],我们可以将FBI[K]看成石子数目分别是FBI[K-1],FBI[K-2]的两堆(一定可以这样分,因为FBI[K-1] > FBI[K-2]*2,若先手取的数目大于等于FBI[K-2],则后手可以一次拿完)

2.将FBI[K-2],FBI[K-1],再次拆分,无论先手如何取,后手总能取走最后一个石子

证明 非FBI数为必胜局:

1.由齐肯多夫定理知道,任意一个整数,可以被拆分成几个不连续的FBI数相加的形式:n=FBI(ak)+FBI(ak-1)+FBI(ak-2)+……+FBI(a1)

2.因为式子中的FBI数不连续,所以FBI(a) > 2FBI(a-1)

3.先手取走FBI(a1)个石子,那么后手只能在FBI(a1+1)堆中取,且不能一次性取完。依旧是说对于任意一堆,总是先手取走最后一个石子!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f
#define MAXSIZE 100005using namespace std;int fib[MAXSIZE];int Game(int n)
{for(int i=1;i<=46;i++){if(fib[i]==n)return 0;}return 1;
}int main()
{int n;fib[1]=1;for(int i=2;i<=46;i++)fib[i]=fib[i-1]+fib[i-2];while(scanf("%d",&n),n){int op=Game(n);if(op==0)printf("Second win\n");elseprintf("First win\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/alan-W/p/6286595.html

HDU 2516 取石子游戏 斐波纳契博弈相关推荐

  1. HDU 2516 取石子游戏 斐波那契博弈

    传送门 背下来的一个概念题没什么好说的 有一堆石子,两个顶尖聪明的人玩游戏,先取者可以取走任意多个,但不能全取完,以后每人取的石子数不能超过上个人的两倍,当石子数为斐波那契数 ,先手输,反之先手赢 # ...

  2. 取石子游戏(斐波那契博弈)

    取石子游戏 #include<iostream> #include<stdio.h> #include<string.h> #include<algorith ...

  3. hdu 2516 取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. 博弈论-斐波那契博弈

    1.斐波那契博弈是另种类型的博弈,这种博弈要求的条件是(1):博弈者还是两个人,n个物品(2)先手在第一次不能取完所有的物品,但是至少取走一个物品.(3)以后的每一个回合,每次取走的物品至多是上一个人 ...

  5. 吴昊品游戏核心算法(新年特别篇)——另类取石子游戏(斐波那契博弈)

    吴昊继续,我再也不想搬一堆石头放在这里了,取而代之的是<编程之美>中的关于游戏章节的一个插图,这本书中也有对<取石子游戏>的较为完备的讨论. 这次的游戏是神马? 1堆石子有n个 ...

  6. 斐波纳契数列(Fibonacci Sequence)

    斐波纳契数列(Fibonacci Sequence)  0.前言 很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓.现在,大学教学任务的考试已经全部结束了,而比赛也告一段落 ...

  7. 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理

    博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...

  8. 数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介、代码实现、exe程序应用(斐波纳契时钟设计)之详细攻略

    数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介.代码实现.exe程序应用(斐波纳契时钟设计)之详细攻略 目录 斐波那契数列的简介 斐波那契数列代码实现 1.python代码实现 2.Java ...

  9. Python3 编程示例:斐波纳契数列

    写一个斐波纳契数列: 其中代码 a, b = b, a+b 的计算方式为先计算右边表达式,然后同时赋值给左边,等价于: 执行结果: 这个例子介绍了几个新特征. 第一行包含了一个复合赋值:变量 a 和 ...

最新文章

  1. 进阶学习(4.4) JVM GC Root 判定, 垃圾的判定
  2. 1.eclipse怎么样新建web项目,eclipse新建web项目
  3. python中print用法
  4. 我们学习到底是为了什么,到底什么才是我们真正想要的
  5. 【Java面经】非科班渣硕面经
  6. 前端学习(1550):$scope和调试工具
  7. Hadoop之HDFS(二)HDFS基本原理
  8. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
  9. 按键精灵手机助手界面三级联动
  10. 蓝牙解码格式哪个最好_拆解报告:山灵UP2 蓝牙音频接收器
  11. python遍历json_python3如何遍历json数据
  12. 文档数据库(document database)和键值数据库(key-value database)的区别(NoSQL)
  13. 毕业设计:基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  14. oracle12c不使用cdb模式,Oracle 12c 使用Non-CDB来创建PDB
  15. 【Hive】Establishing SSL connection without server‘s identity verification is not recommended. Accord
  16. 全时定妆精致小欧眉,温柔与酷可以兼得
  17. druid数据源下 sqlserver 出现 对象名 'xxx' 无效
  18. 软件测试:黑盒测试、白盒测试和灰盒测试
  19. AES/ECB/PKCS7Padding 加密
  20. Excel作图过程的对比分析作图及图表系列名称更改

热门文章

  1. spring aop抽取切点表达式
  2. zookeeper基本操作(常用命令)
  3. 按照 排序 oracle,oracle 按照中文排序
  4. std中稳定排序算法_敏哥:深挖亚马逊A9算法中的广告搜索排序
  5. 第一行代码学习笔记第九章——使用网络技术
  6. Android 7.0使用私有NDK库的问题
  7. windows10 下 用图片手把手教你 卸载 cygwin
  8. vue+axios天气查询——天知道效果展示及源码分析
  9. eclipse为什么导入不了awt_为什么选择javafx?
  10. 小程序获取sessionkey_小程序,足不出户获取更多客源