集训内容:博弈论(巴什博弈、威佐夫博奕、尼姆博弈、斐波那契博弈、SG函数)
复习基础DP+讲题
巴什博弈:
巴什博弈是最基本的一类博弈,他的定义如下
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
对于必胜态N和必败态P的分析:
现在如果有m+1个物品,则先手至少取一个,并且不能取完,就导致了先手必败;
如果物品数n<=m,则先手第一次即可全部取完,因此先手必胜;
如果物品数有(m+1)*x+c(c!=0)个,则先手第一次取c个,后手取y个,此后先手每次取(m+1)-y个,就可以保证每个m+1的最后一部分都是先手取得,因此先手必胜,同样的,如果c=0,则每个m+1的最后一部分都是后手取得,先手必败。
威佐夫博弈:
有两堆物品 每堆有若干个 两个人轮流取物品 规定有两种取法
1、从一堆物品中取 至少取一个 没有上限
2、从两堆物品中取相同个数的物品
将这两堆物品最后都取完的是winner
当面对(0,0) (1,2) (3,5) (4,7) (6,10) (8,13) (9,15) (11,18) (12,20)。。。。的情况是必败。
可以发现规律: (ak,bk);ak+k=bk;ak=(int)(k*(1+sqrt(5))/2);
所以只需判断两点之差*1.618(黄金分割数)是否等于ak即可判断是否是奇异点(必败)即可。
斐波那契博弈:
有一堆个数为n的石子,游戏双方轮流取石子,满足:
1)先手不能一次把所有的石子取完;
2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。
取走最后一个石子的人为winner,求必败态
实验猜想,Fibonacci数列:f[n]:1,1,2,3,5,8,13,21,34,55,89必败
借用“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。
尼姆博弈:
三堆(可以推广到n堆),每堆若干物品,两人轮流从某一堆中取物品,至少取一个,没有上限,最后取完的是winner。
假设三队物品分别有[x,y,z],当某人面对[0,0,0]这种局面时,这个人一定是输的;
当某人面对[0,n,n]这种局面时,这个人也是输的,当面对这种局面时,先手从两堆中的某一堆中拿走k个,然后后手从另一堆中拿走k个,一直拿下去,最后面对[0,0,0]这种局面的一定是先手;
当某人面对[1,2,3]这种局面时,这个人也是输的,当先手面对这种情况时,无论怎么取,后手都能把局势变成[0,n,n]这种情况,奇异局势特点:将每堆中物品的个数全部异或之后结果为0。
Bouton定理:先手能够在非平衡尼姆博弈中取胜,而后手能够在平衡的尼姆博弈中取胜。即状态(x1, x2, x3, …, xn)为P状态当且仅当x1 xor x2 xor x3 xor … xor xn =0。这样的操作也称为Nim和(Nim Sum)。
Nim游戏是什么,参见百度百科:百度百科_Nim
在证明Nim游戏的SG函数的“根据这个判断被判为N-position的局面一定可以移动到某个P-position”命题时,有这么一段证明:对于某个局面(a1,a2,...,an),若a1^a2^...^an不为0,一定存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。不妨设a1^a2^...^an=k,则一定存在某个ai,它的二进制表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。这时ai^k<ai一定成立。则我们可以将ai改变成ai'=ai^k,此时a1^a2^...^ai'^...^an=a1^a2^...^an^k=0。
由此,我们可以知道,对任意的当前状态S,只需将某堆石头a[i]变为S^a[i]即可使得整个局面的SG值为0,即变为必败态。(当然,为了保证操作合法,应当有S^a[i]<a[i],S^a[i]=a[i]时相当于不操作,不合法)