取石子游戏,威佐夫博弈的推理
1.游戏规则
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子(至少取1个)。
每次有两种不同的取法,规则如下:
1.一是可以在任意的一堆中取走任意多的石子;
2.二是可以在两堆中同时取走相同数量的石子。
最后把石子全部取完者为胜者,假设双方都采取最好的策略,给定初始数量,你是否有必胜的把握?
2.分析
为方便描述,设f[x,y]表示两堆石子数量分别为x,y,且你先取。
1.f[x,y]=1表示必胜
2.f[x,y]=0表示必败
3.石堆没有顺序优先级,所以f[x,y]=f[y,x]
2.1首先分析3种特殊情况
1.两堆石子数量一样,两堆都取n个,必胜,得f[n,n]=1
2.只有一堆石子,一堆取n个,必胜,得f[n,0]=f[0,n]=1
3.石子数量为f[2,1],只能取(1,0),(2,0),(1,1),剩下石子为(1,1),(0,1),(1,0)对方都能胜,所以必败,得f[2,1]=f[1,2]=0,称此为奇异局势(必败局势)。
2.2列出前面的几种情况如下:
可以得到如下规律:
奇异局势有f[2,1],f[5,3],f[7,4],f[10,6]...,必败
蓝色为先取的数量,一次就可以将状态转为奇异局势,必胜
f[x+1,x],f[1,x],f[2,x]都可以转为f[2,1],必胜
f[x+2,x],f[3,x],f[5,x]都可以转为f[5,3],必胜
f[x+k,x]可以转化为f[x1,y1],x1-y1=k的奇异局势,而且f[x1,x],f[y1,x]也可以转化为f[x1,y1]
即奇异局势为f[x,y],|x-y|=1,2,3,4,x,y为正整数,且x,y不能重复出现
结论:如果两个人都采取最优策略,面对非奇异局势,先拿必胜;面对奇异局势,后拿必胜。
3.理论推广
这个其实是经典的威佐夫博弈问题,但首先我们先介绍另一个定理,贝蒂定理。
3.1贝蒂定理
3.2回归威佐夫问题
3.3如何快速判断
3.4例题
poj1067:http://poj.org/problem?id=1067
3.5代码实现
const double q = (1 + sqrt(5.0)) / 2.0;bool isWythoff(int a, int b) {int t;if (a > b) t = a, a = b, b = t;return (int) ((b - a) * q) == a;}
关注我,涨知识,公众号:几何思维
取石子游戏,威佐夫博弈的推理相关推荐
- 洛谷P2252 取石子游戏(威佐夫博弈)
题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- HDU - 1527 取石子游戏(威佐夫博弈)
题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...
- 取两堆石子(威佐夫博弈)
有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法, 一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者 ...
- 【HDU - 2516 】取石子游戏 (Fibonacci博弈)
题干: 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win".先取者胜 ...
- POJ1067 HDU1527 取石子游戏【博弈】
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 威佐夫博弈:百练OJ:1067:取石子游戏
威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...
- POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...
- 杭电acm 2177 取(2堆)石子游戏(威佐夫博弈)
取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 【HDU - 1527】【POJ - 1067】取石子游戏 (威佐夫博弈)
题干: 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者 ...
- POJ1067_取石子游戏_威佐夫博弈
/* *State: 1067 Accepted 176K 16MS C++ 435B *题目大意: * 威佐夫博弈 *解题思路: * 略. */ #include <iostream> ...
最新文章
- python建站与java建站有何不同_详解模板建站和定制建站的不同之处
- python写计算器
- php在用js_encode()转换时,实现斜杠不转义
- Java中正则Matcher类的matches()、lookAt()和find()的差别
- 阿里巴巴集团CRO刘振飞:双11的六维技术准备
- armax函数 matlab 源码_将可读性不强的MATLAB公式样式转为直观的LaTeX样式
- php 7.2 兼容5.5吗,PHP5.5至PHP7.2 新特性整理
- Python有了concurrent的话mutiprocessing和threading还有存在的意义吗?
- android刷新时的圆形动画_Android动画篇(一):圆形进度条CircleProgressBar
- python语言程序设计赵璐课后答案_Python语言程序设计
- 永远的动漫,梦想在,就有远方
- 335x内核ddr3频率与电压修改
- 如何在PS(Adobe Photoshop)安装Portraiture3插件教程
- 一个人的职业生涯之旅 —— 应届生求职、面试、Offer、跳槽(发展瓶颈、薪资倒挂、职业倦怠、骑驴找马、简历优化)问题分享
- 细化算法matlab
- 360插件化踩坑记录(二),RePlugin安装、启动插件无反应
- jmeter性能测试并监控服务器
- 谷歌浏览器打印不弹出预览直接打印机打印
- c语言flag go to,C 语言getopt与go语言flag获取命令参数
- 为自己选一个网络硬盘
热门文章
- CVE-2017-11882:Microsoft office 公式编辑器 font name 字段栈溢出通杀漏洞调试分析
- window.opener 与 window.dialogArguments的用法
- 《Hibernate官方文档》_笔记
- Visual C++ 2010 Express中文版如何下载
- 停车场系统管理数据库设计说明书
- (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
- 移动设备数据丢失恢复办法
- Spring+Quartz实现文件中转站
- 科密t1消费管理系统_科密A1\T1登录密码获取软件-科密A1\T1登录密码获取工具1.0.0 安卓版-东坡下载...
- 全球互联网进入后美国时代:在世界互联网大会上的演讲