详解威佐夫博弈(POJ1067)
Wythoff Game
Overview
其解决的典型博弈问题是: 给定两堆物体, 两位选手轮流取物, 规定每位选手要么从某一堆中取物, 要么从两堆中同时取相同数量的物体, 至少取一物, 多者不限. 规定最后取完的胜利. 要求判断给定物体数量时, 先手后手的输赢情况.
Wythoff给出的结论是: 设两堆物体的数量分别为a, b, 不妨设a⩽ba\leqslant ba⩽b, 若
⌊1+52(b−a)⌋=a\lfloor \frac{1 +\sqrt{5}}{2} (b-a) \rfloor = a ⌊21+5(b−a)⌋=a
则先手必败, 后手有必胜拿法; 反之, 即不相等, 则先手有必胜拿法, 后手必败.
Theoretical Analysis
奇异局势序列
称两堆物品的数量无序对(ak,bk)(a_k,b_k)(ak,bk)为局势, 其中ak⩽bk,k=0,1...,na_k \leqslant b_k, k=0,1...,nak⩽bk,k=0,1...,n. 定义奇异局势为, 当前选手面临它时, 无论他怎么拿, 另外一位选手总有必胜的拿法. 可以验证下列局势皆为奇异局势,
(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)...(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)... (0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)...
观察上面的序列, 我们可以发现: bk=ak+kb_k = a_k + kbk=ak+k, 且下一奇异局势的aka_kak等于前面没有出现过的最小自然数(后称发现).
现在, 利用上述发现把自然数组成的不重复无序对集合划分为两个部分, 一个部分称为奇异局势集合(序列), 另一部分称为非奇异局势集合. 于是, 需要证明是: 若选手当前面临奇异局势, 则其必输, 另外一位选手有必胜拿法; 反之, 必赢. (现在的奇异局势不具有前面定义的必输的内涵, 这恰是需要证明的. 现在的理论出发点是"发现".)
首先, 需要证明奇异局势集合和非奇异局势集合具有如下性质.
性质1
任何自然数都包含在一个且仅一个奇异局势中.
证明:
首先, 显然任何自然数都包含在某个奇异局势中, 因此只需证明仅包含在一个奇异局势中. 显然∀k\forall k∀k, 有ak>ak−1a_k>a_{k-1}ak>ak−1, 于是有bk=ak+k>ak−1+k−1b_k=a_k+k>a_{k-1}+k-1bk=ak+k>ak−1+k−1. 即是说, 每个奇异局势中的自然数在其之前的奇异局势中都未出现过.
性质2
任意符合规定的拿法都将导致奇异局势变为非奇异局势.
证明:
若只减少某奇异局势中的一个分量, 则由性质1, 另外一个分量只能在一个奇异局势(即当前局势)中, 因此减少后的局势必为非奇异局势.
若改变某奇异局势中的两个分量, 由于两个分量只能同时拿去相同的数量, 因此, 改变后的局势的两个分量的差与当前奇异局势的两个分量差相同. 由"发现", 有相同差的局势中只有一个是奇异局势(即当前), 其他皆为非奇异局势.
性质3
任何非奇异局势都可通过适当的拿法变为奇异局势.
证明:
设当前非奇异局势为(a,b)(a,b)(a,b),
- 若a=ba=ba=b, 则两个分量同时减去a, 则变为非奇异局势(0,0)(0,0)(0,0).
- 若∃k,a=ak\exists k, a=a_k∃k,a=ak, 而b>bkb>b_kb>bk, 则只要第二个分量减去b−bkb-b_kb−bk即可.
- 若∃k,a=ak\exists k, a=a_k∃k,a=ak, 而b<bkb<b_kb<bk, 由于bk−a>b−ab_k-a>b-abk−a>b−a, 因此在奇异局势(ak,bk)(a_k,b_k)(ak,bk)前面存在某个奇异局势两分量之差为b−ab-ab−a, 于是只需在当前局势的两个分量中同时拿去某个数量就可变为前面的某个差为b−ab-ab−a的奇异局势.
- 若∃k,a>ak\exists k, a>a_k∃k,a>ak, 而b=ak+kb=a_k+kb=ak+k, 则只需第一个分量减去a−aka-a_ka−ak即可.
- 若∃k,a<ak\exists k, a<a_k∃k,a<ak, 而b=ak+kb=a_k+kb=ak+k, 分两种情况
- 若∃j<k,a=aj\exists j<k, a=a_j∃j<k,a=aj, 则只需第二个分量减去b−bjb-b_jb−bj.
- 若∃j<k,a=bj\exists j<k, a=b_j∃j<k,a=bj, 则第二个分量减去b−ajb-a_jb−aj后变为(bj,aj)(b_j, a_j)(bj,aj)即奇异局势(aj,bj)(a_j,b_j)(aj,bj).
证明
由性质2, 若先手面临奇异局势, 无论他怎么拿都会变成非奇异局势; 由性质3, 后手总有办法把其面临的非奇异局势变成奇异局势. 此外, 由于每次至少从某一堆中拿走一个, 因此两堆总数在不断减少. 于是, 最终由后手把局势变为(0,0)(0,0)(0,0), 即是说, 最终他拿走某些物品后立即使两堆数量变为零. 即后手必胜, 先手必输.
奇异局势的通项公式
现在的问题是奇异局势序列有怎样的通项公式呢? 需要用到Betty定理.
Betty定理
设a,ba,ba,b是两个正无理数, 若1a+1b=1\frac{1}{a}+\frac{1}{b}=1a1+b1=1. 记P={⌊an⌋∣n∈N+}P=\{\lfloor an \rfloor\ | n \in \N^+ \}P={⌊an⌋ ∣n∈N+}, Q={⌊bn⌋∣n∈N+}Q=\{\lfloor bn \rfloor\ | n \in \N^+ \}Q={⌊bn⌋ ∣n∈N+}, 则有P∩Q=∅P \cap Q=\varnothingP∩Q=∅且P∪Q=N+P \cup Q=\N^+P∪Q=N+. (证明请自行检索)
通项公式
令P′={1,3,4,6,8,...}P'=\{1, 3, 4, 6, 8,...\}P′={1,3,4,6,8,...}即除(0,0)(0,0)(0,0)之外的所有奇异局势的第一个分量组成的集合, Q′={2,5,7,10,13...}Q'=\{ 2,5,7,10,13...\}Q′={2,5,7,10,13...}即第二个分量组成的集合, 则有P∩Q=∅P \cap Q=\varnothingP∩Q=∅且P∪Q=N+P \cup Q=\N^+P∪Q=N+. 结合Betty定理, 这给我们启示.
设∃a,b\exists a,b∃a,b使得P′={⌊an⌋∣n∈N+}P'=\{\lfloor an \rfloor\ | n \in \N^+ \}P′={⌊an⌋ ∣n∈N+}和Q′={⌊bn⌋∣n∈N+}Q'=\{\lfloor bn \rfloor\ | n \in \N^+ \}Q′={⌊bn⌋ ∣n∈N+}, 则a,ba,ba,b可以满足1a+1b=1\frac{1}{a}+\frac{1}{b}=1a1+b1=1, 又由两分量之间的关系⌊bn⌋=⌊an⌋+n=⌊(a+1)n⌋\lfloor bn \rfloor\ = \lfloor an \rfloor + n=\lfloor (a+1)n \rfloor⌊bn⌋ =⌊an⌋+n=⌊(a+1)n⌋, 得b=a+1b=a+1b=a+1, 带入前式解得a=1+52a=\frac{1+\sqrt{5}}{2}a=21+5.
即有ak=⌊1+52k⌋,bk=ak+k,a_k=\lfloor \frac{1+\sqrt{5}}{2} k\rfloor, b_k = a_k + k,ak=⌊21+5k⌋,bk=ak+k, 从而ak=⌊1+52(bk−ak)⌋.a_k=\lfloor \frac{1+\sqrt{5}}{2} (b_k-a_k)\rfloor.ak=⌊21+5(bk−ak)⌋.
Example
POJ 1067
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;int main() {int a, b;while (scanf("%d %d", &a, &b) != EOF) {if (floor((1 + sqrt(5.0)) / 2 * abs(a - b)) == min(a, b))printf("0\n");else printf("1\n");}return 0;
}
详解威佐夫博弈(POJ1067)相关推荐
- 博弈之威佐夫博弈详解
威佐夫博弈是博弈中的另一个经典模型. 问题:首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个.先取完者赢. 分析:首先我们根据条件来分析博弈中的奇异局势 第一个 ...
- POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...
- BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈
题目描述 一天,Besssie准备和FJ挑战奶牛跳棋游戏.这个游戏上在一个M*N的棋盘上, 这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1,N-1). ...
- HDU 5754 博弈(威佐夫博弈)
这个题除了皇后的可以套用一下威佐夫博弈以外其他的都可以找规律找出来,主要为了学习一下威佐夫博弈, 威佐夫博弈:给两堆石子,每次都可以从其中一堆石子中取n个石子或者从两堆石子中都取n个石子,最后将石子取 ...
- 巴什博弈+威佐夫博弈
1.巴什博弈(Bash Game) 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个. 最后取光者胜 若n%(m+1)==0,后手必胜,反之,先手必胜. 最后取光着输 当( ...
- POJ1067_取石子游戏_威佐夫博弈
/* *State: 1067 Accepted 176K 16MS C++ 435B *题目大意: * 威佐夫博弈 *解题思路: * 略. */ #include <iostream> ...
- 洛谷P2252 取石子游戏(威佐夫博弈)
题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 博弈论入门之威佐夫博弈
威佐夫博弈 威佐夫博弈是一类经典的博弈问题 有两堆石子,两个顶尖聪明的人在玩游戏,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能取得人输,分析谁会获得胜利 博弈分析 ...
- 威佐夫博弈:百练OJ:1067:取石子游戏
威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...
- HDU - 1527 取石子游戏(威佐夫博弈)
题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...
最新文章
- 什么命令看服务器系统,查看linux系统版本可以使用什么命令_网站服务器运行维护...
- android面试题总结加强
- centos7.5可以安装mysql_Linux(Centos7.5)安装Mysql
- CGTN专访第四范式裴沵思 阐释数字化转型背后的驱动力
- 深入浅出设计模式——组合模式(Composite Pattern)
- (转)编码剖析Spring依赖注入的原理
- 关于北大陈秉乾教授的一些趣事
- 自动驾驶-毫米波雷达系列基础篇-测速原理
- php查询qq等级,php仿QQ等级太阳显示函数_php
- Vue组件设置缓存kepp-alive 后如何获取数据
- SuperMap iDesktopX 影像/栅格数据不用导入导出即可分析处理啦!
- python 面试题 阿里_最新阿里巴巴面试题(附带面试标准答案)
- ArcGIS的运行许可文件ecp如何打开?
- 一个严谨的STM32串口DMA发送接收(1.5Mbps波特率)机制
- ❤️爆肝新一代大数据存储宠儿,梳理了2万字 “超硬核” 文章!❤️
- 计算机网络读书笔记(二)
- 电信高清语音服务器,电信VoLTE高清通话来了,来电秒接通、打电话4G不掉线!...
- 解决Idea Translation插件翻译失败 更新TKK失败 time out 问题
- 10名IB学生获得满分,新加坡环球印度国际学校成为一匹黑马
- ios系统怎么录屏?这个方法可以尝试下