HDU 2516 取石子游戏 斐波纳契博弈
斐波纳契博弈:
有一堆个数为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 取石子游戏 斐波纳契博弈相关推荐
- HDU 2516 取石子游戏 斐波那契博弈
传送门 背下来的一个概念题没什么好说的 有一堆石子,两个顶尖聪明的人玩游戏,先取者可以取走任意多个,但不能全取完,以后每人取的石子数不能超过上个人的两倍,当石子数为斐波那契数 ,先手输,反之先手赢 # ...
- 取石子游戏(斐波那契博弈)
取石子游戏 #include<iostream> #include<stdio.h> #include<string.h> #include<algorith ...
- hdu 2516 取石子游戏
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 博弈论-斐波那契博弈
1.斐波那契博弈是另种类型的博弈,这种博弈要求的条件是(1):博弈者还是两个人,n个物品(2)先手在第一次不能取完所有的物品,但是至少取走一个物品.(3)以后的每一个回合,每次取走的物品至多是上一个人 ...
- 吴昊品游戏核心算法(新年特别篇)——另类取石子游戏(斐波那契博弈)
吴昊继续,我再也不想搬一堆石头放在这里了,取而代之的是<编程之美>中的关于游戏章节的一个插图,这本书中也有对<取石子游戏>的较为完备的讨论. 这次的游戏是神马? 1堆石子有n个 ...
- 斐波纳契数列(Fibonacci Sequence)
斐波纳契数列(Fibonacci Sequence) 0.前言 很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓.现在,大学教学任务的考试已经全部结束了,而比赛也告一段落 ...
- 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理
博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...
- 数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介、代码实现、exe程序应用(斐波纳契时钟设计)之详细攻略
数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介.代码实现.exe程序应用(斐波纳契时钟设计)之详细攻略 目录 斐波那契数列的简介 斐波那契数列代码实现 1.python代码实现 2.Java ...
- Python3 编程示例:斐波纳契数列
写一个斐波纳契数列: 其中代码 a, b = b, a+b 的计算方式为先计算右边表达式,然后同时赋值给左边,等价于: 执行结果: 这个例子介绍了几个新特征. 第一行包含了一个复合赋值:变量 a 和 ...
最新文章
- 进阶学习(4.4) JVM GC Root 判定, 垃圾的判定
- 1.eclipse怎么样新建web项目,eclipse新建web项目
- python中print用法
- 我们学习到底是为了什么,到底什么才是我们真正想要的
- 【Java面经】非科班渣硕面经
- 前端学习(1550):$scope和调试工具
- Hadoop之HDFS(二)HDFS基本原理
- Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
- 按键精灵手机助手界面三级联动
- 蓝牙解码格式哪个最好_拆解报告:山灵UP2 蓝牙音频接收器
- python遍历json_python3如何遍历json数据
- 文档数据库(document database)和键值数据库(key-value database)的区别(NoSQL)
- 毕业设计:基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
- oracle12c不使用cdb模式,Oracle 12c 使用Non-CDB来创建PDB
- 【Hive】Establishing SSL connection without server‘s identity verification is not recommended. Accord
- 全时定妆精致小欧眉,温柔与酷可以兼得
- druid数据源下 sqlserver 出现 对象名 'xxx' 无效
- 软件测试:黑盒测试、白盒测试和灰盒测试
- AES/ECB/PKCS7Padding 加密
- Excel作图过程的对比分析作图及图表系列名称更改
热门文章
- spring aop抽取切点表达式
- zookeeper基本操作(常用命令)
- 按照 排序 oracle,oracle 按照中文排序
- std中稳定排序算法_敏哥:深挖亚马逊A9算法中的广告搜索排序
- 第一行代码学习笔记第九章——使用网络技术
- Android 7.0使用私有NDK库的问题
- windows10 下 用图片手把手教你 卸载 cygwin
- vue+axios天气查询——天知道效果展示及源码分析
- eclipse为什么导入不了awt_为什么选择javafx?
- 小程序获取sessionkey_小程序,足不出户获取更多客源