博弈小结

来源:互联网 发布:windows ios 映像 编辑:程序博客网 时间:2024/05/16 02:08

1.巴什博弈:

有n粒石子,每次最多取m个,俩个人都不傻,问谁会胜;

n=m+1时,先手(先取的那一个)必败,因为他最少取一个,剩下的数量肯定是不大于m的,那么第二个人可以一次性取完。

依照这个原理,在取的过程中,可以每次都给对手恰好留够(m+1)个石子,这时对方一定取不完,但是己方一定可以取完(只要不傻)。也就是k=n%(m+1)若k不等于0,说明你下一步可以把k*(m+1)之外的取光,留给对手(m+1)的倍数个石子,必赢

另一种情况,就是局势已经是(m+1)的倍数个石子了,只要对方不傻,每次都给你留(m+1)的倍数个,你必输。

2.尼姆博奕:

在了解尼姆博弈之前,先了解一下二进制中的异或运算。

所谓异或运算,就是在所有数均化为二进制之后的一种运算,并且是八位,正数不够补零,(负数不够补一),

举个例子:4的二进制是100,八位之后便是00000100;在此基础上介绍异或运算,异或运算又名(+),为什么这样说呢,因为它只加却不进位,比如7异或3,即111(+)011,结果是100,就是1(+)1=0,1(+)0=1;独特的加法运算。

接下来便是尼姆博弈,有n堆石子,每次可以取一堆,或者是一堆中的一部分,谁先取完谁胜。

这里提到奇异局势,就是无论哪一方面对奇异局势最终都会败。比如当n=3时,描述其中一种奇异局势(0,0,0);

是不是谁面对它都必败(嘿嘿,咱继续),(0,x,x)也是,信不?我取x,他取x,然后我败,,也就是说,谁面对奇异局势,必败。

这个时候,为了胜出,所以就要千方百计的让对方面对奇异局势。

也就是你要在这堆里取某个特定的数目,使其变为奇异局势。假设这个数目为p;

怎么求p呢,这前人的智慧就显得至关重要了,

尼姆老大爷就给我们总结了:

任何奇异局势(a,b,c)都有a (+)b(+) c =0。假设要在c中取石子,那就p=c--a(+)b,(如果c<p,那就换从a或者b中取呗),在此之前,有必要了解一点,一个数异或它自身,结果是0.

3.斐波那契博弈:

有一堆个数为n的石子,游戏双方轮流取石子,满足:

1)先手不能在第一次把所有的石子取完;

2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。

约定取走最后一个石子的人为赢家,求必败态。

必败n必须符合斐波那契;

#include<iostream>  #include<cstdio>  #include<cstring>  #include<algorithm>  #include<cmath>  #include<vector>  #include<string>  #include<map>  #define LL long long  #define N 1000000  #define inf 1<<20  using namespace std;  int fib[50];  int main(){      fib[0]=1;fib[1]=2;      for(int i=2;i<45;i++)          fib[i]=fib[i-1]+fib[i-2];      int n;      while(scanf("%d",&n)!=EOF&&n){          int i=0;          for(i=0;i<45;i++)              if(fib[i]==n)                  break;          if(i<45)              puts("Second win");          else              puts("First win");      }      return 0;  }  

4.威佐夫博弈:

有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜.

重点:

奇异局势下先手必败,非奇异局势下先手必胜;

类似于尼姆博弈的奇异局势,(a,b),怎么判断是不是奇异局势呢?

两堆物品个数分别为a,b(a<b),则k=b-a,再判断a是否等于[(b
-a)*( √5+1)/2] 即可得知是否是奇异局势。


5.Nim Staircase博奕:

这个问题是尼姆博弈的拓展:游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时
可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上(0号)的人获胜。

算法:

将奇数楼层的状态异或,和为0则先手必败,否则先手必胜:

不会证明。。。。。。。(TJT).....









1 0
原创粉丝点击