一种斐波那契博弈(Fibonacci Nim)
事实上我也不知道这算是哪个类型的博弈
是在复习$NOIP$初赛的时候看到的一个挺有趣的博弈
所以就写出来分享一下
$upd \ on \ 2018.10.12$忽然发现这个其实就是$Fibonacci Nim$...
题目:有n张纸牌,A,B两人轮流按照以下规则取牌。
规则一:A先取,但是不能在第一次将纸牌全部取完,而且至少要取一张;
规则二:每次所取纸牌张数必须大于或等于1,且小于等于对手刚取的纸牌张数的两倍。取到最后一张牌者为胜者。
输入纸牌的张数n,判断A是否必胜,如果必胜,输出”win”,否则输出”lose”。
问题分析:当n较小时,可以归纳如下:
⑴2张牌时,先拿的人必输;
⑵3张牌时,先拿的人必输;
⑶我们先看5张牌的情况,假如我们把取5张牌分成两个步骤:先取前面2张,再取后面3张,为什么可以这样分成两个步骤?因为后取者有这个权力!先者只能取第一张,后者可以取到第二张,这样,后者就必可以取到第5张牌,先者必输。
同样,如果是8张牌时,可以分为:先取前面3张,再取后面5张,后者胜,先者必输。
结论:⑴如果牌的张数$n$是$Fibonacci$数时,先取牌者必败。 ⑵对所有非$Fibonacci$数都是先取人必赢,反之,必败。
下面给出一般性证明:
假设$n<=k$,且牌数为$Fibonacci$数时,都是取牌者必输。
那么$n=k+1$时,因为$F(k+1)=F(k)+F(k-1)$,即要取完$F(k+1)$张牌,可以分成两步:先取完$F(k-1)$张牌,再取完$F(k)$张牌。对于$F(k-1)$张牌,先取A者输!意味着对于$F(k)$张牌,A还得必须先取,所以A输。
那么,牌数为非$Fibonacci$数时,先取牌者有没有必胜的策略呢?
引用一个定理:当一个数不是$Fibonacci$数时,这个数必然等于若干个$Fibonacci$数之和,并且这些$Fibonacci$数在$Fibonacci$数列中都不相邻。
比如:$78=55+23=55+21+2$(其中55,21,2都是$Fibonacci$数);
对于非$Fibonacci$数$a0$,设f(n)是小于4a0$的最大$Fibonacci$数。
$a0=f(n)+…+f(i)+f(j)$,其中$f(j)$是式中最小的$Fibonacci$数,$f(i)$是第二小的$Fibonacci$数。由于$f(i)$、$f(j)$在$Fibonacci$数列中并不是相邻的,所以$f(i)>2*f(j)$。所以先取者可以直接取走$f(j)$张牌,后取者无法一次取走$f(i)$张牌,$f(i)$是$Fibonacci$数,由前面的分析,后取者必败。
结论:对所有非$Fibonacci$数都是先取人必赢,反之,必败。
一种斐波那契博弈(Fibonacci Nim)的更多相关文章
- 博弈论基础知识: 巴什博奕+斐波那契博弈+威佐夫博奕+尼姆博弈(及Staircase)(转)
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.若(m+1) | n,则先手必败,否则先手必胜.显然,如果n=m+1 ...
- HDU 2516 取石子游戏(斐波那契博弈)
取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- python实现斐波那契数列(Fibonacci sequence)
使用Python实现斐波那契数列(Fibonacci sequence) 斐波那契数列形如 1,1,2,3,5,8,13,等等.也就是说,下一个值是序列中前两个值之和.写一个函数,给定N,返回第N个斐 ...
- 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)
博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...
- 51Nod 1070 Bash游戏 V4(斐波那契博弈)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1070 题意: 思路: 这个是斐波那契博弈,http://blog.csd ...
- hdu2516斐波那契博弈
刚开始想用sg函数做,想了半天没一点思路啊. 原来这是一个新题型,斐波那契博弈 斐波那契博弈模型:有一堆个数为 n 的石子,游戏双方轮流取石子,满足:1. 先手不能在第一次把所有的石子取完:2. 之后 ...
- 51nod Bash游戏(V1,V2,V3,V4(斐波那契博弈))
Bash游戏V1 有一堆石子共同拥有N个. A B两个人轮流拿.A先拿.每次最少拿1颗.最多拿K颗.拿到最后1颗石子的人获胜.如果A B都很聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得 ...
- {HDU}{2516}{取石子游戏}{斐波那契博弈}
题意:给定一堆石子,每个人最多取前一个人取石子数的2被,最少取一个,最后取石子的为赢家,求赢家. 思路:斐波那契博弈,这个题的证明过程太精彩了! 一个重要的定理:任何正整数都可以表示为若干个不连续的斐 ...
- 第2章 数字之魅——斐波那契(Fibonacci)数列
斐波那契(Fibonacci)数列 问题描述 递归算法: package chapter2shuzizhimei.fibonacci; /** * Fibonacci数列递归求解 * @author ...
随机推荐
- mysql获取下一篇和上一篇文章的ID
mysql获取上一篇和下一篇文章的ID只要在当前页面读取上一个和下一个的ID就可以了.假设当前ID为10:搜索上一个的ID:select id from table where id<10 ...
- 实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上
转载:http://www.cnblogs.com/top5/archive/2012/12/10/2812133.html 目的:实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC) ...
- 【Loadrunner】【浙江移动项目手写代码】代码备份
vuser_init(){ lr_start_transaction("login"); web_url("10.78.224.136:8080" ...
- [LeetCode]94, 144, 145 Binary Tree InOrder, PreOrder, PostOrder Traversal_Medium
Given a binary tree, return the inorder, preorder, postorder traversal of its nodes' values. Example ...
- [lr] 矫正白平衡
中性色区域 • 定义 中性色又称为无彩色系,是指由黑色.白色及由黑白调和成的各种深浅不同的灰色系列.中性色既不属于冷色调,也不属于暖色调.黑白灰是常用到的三大中性色.中性色区域是指不包含色彩的区域,准 ...
- VMware Coding Challenge: Possible Scores && Summary: static
Combination Sum I 那道题的变体 /* * Complete the function below. */ static int is_score_possible(int score ...
- PHP查询MySQL大量数据的内存占用分析
这篇文章主要是从原理, 手册和源码分析在PHP中查询MySQL返回大量结果时, 内存占用的问题, 同时对使用MySQL C API也有涉及. 昨天, 有同事在PHP讨论群里提到, 他做的一个项目由于M ...
- mysql的锁机制
一.读锁(共享锁/Share Locks,S锁). 1.select * from table_name where ... lock in share mode.(事务A) (1)这种方式是获取指定 ...
- GIC400简介
GIC400是arm公司的中断控制IP,提供axi4接口,主要功能: 1)中断的使能(enable,mask); 中断的优先级(poriority); 中断的触发条件(level-sensitive ...
- Q-learning简明实例
本文是对 http://mnemstudio.org/path-finding-q-learning-tutorial.htm 的翻译,共分两部分,第一部分为中文翻译,第二部分为英文原文.翻译时为方便 ...