简单博弈论

1.巴什博弈
问题描述一般为,有一堆物品,有N个,A、B轮流从中取物,最少取一个,最多取m个,规定取走最后一堆的人获胜。
对于博弈问题,首先需要分析的是它的必败情况。由题目可知,假设当前的人A面对的物品堆已空,即为0时,就输了,所以最基本的必败为0。那么根据取物品的取值为1~m,可以知道,在上一步B取物的时候,那一堆只剩下1~m个了,根据两人都采取最优策略的原则,A在可能的情况下绝对不会让B遇到1~m这种情况,除非当前A遇到的那一堆是1+m个的,而自己必须至少取一个,才会导致这种局面。换言之,如果初始的时候,N%(m+1)==0,那么每当先手取走k,后手都可以通过取m+1-k使得先手再次面临 N%(m+1)==0的必败局面。因此只要N%(m+1)==0 则先手必败,否则 当N%(m+1)==k  【通过取余可知 k<=m】时,先手都可以通过取走k个使得后手面临 N%(m+1)==0 的必败局面
一个类似的变相问题:两个人轮流报数,每次至少报一个,至多报m个,报到第N个者胜。

推荐:hdu 1846,2147,2149,2188。

P/N图分析:  P表示必败点 遇到该点局势的人必败  N表示必胜点  遇到该点局势的人必胜  注:前提是两者都不失误
对于P点来说,他的每一个下一个承接状态都是必胜点N。对于N点来书,他的每一个下一个承接状态中至少有一个P。
那么图的终结点,也就是结束状态,为P的,因为无论谁面对这个状态都是输。然后逆向推导即可。注意从边界开始推。


2.斐波那契博弈
一堆个数为N的石子,轮流取石。
规定:1.先手不能一次取完
          2.如果上一个人取了x,那么现在这个人可以取1·~2*x

介绍一个定理:齐肯多夫定理:任何正整数都可以被分解为任意个不连续(注意不连续很重要)的斐波那契数之和。
对于斐波那契来说,F[i]=F[i-1]+F[i-2],那么如果是两个不连续的斐波那契的话,也就是最接近的情况为F[i]和F[i-2],而F[i]=F[i-1]+F[i-2],因为F[i-1]>F[i-2],所以F[i]>2*F[i-2];这里出现了两倍,于是联想到了斐波那契博弈的要求,取的数量为1~2*x。(解释乱七八糟:暂时自己也想不通,先记一下结论)

所以将一开始的整数分解为若干个不连续的斐波那契数列和(分成多个堆),由于不连续斐波那契的 F[i]>2*F[i-2]关系,因此如果一开始的数是一个斐波那契数的话,那么A必须是在后手才能取走最后一个。而如果他不是一个斐波那契数的话,那么A可以先手取走K使得对手面临一个斐波那契数。
因此结论:如果一开始是斐波那契,则后手赢,如果一开始不是斐波那契,则先手赢。即面对斐波那契数的人必输。


3.威佐夫博弈  证明需要用到betty定理
问题描述:有两堆物品,各为若干个,两个轮流任意从其中一堆或者同时从两堆中取相同的任意个(可以至少把一堆取完)。每次至少取一个,取光者胜。
分析:用(ai,bi)表示局势(两堆各自的数量),当A面对(0,0)时,A必输,称此为奇异局势。列举出前几个奇异局势,为(0,0),(1,2)
(3,5),(4,7),(5,9)
规律为  ai为之前的局势中没有出现的第一个数,bi=ai+i。
奇异局势有的性质:
1.任何自然数仅仅包含在一个奇异局势中
ak>ak-1  由于 bk=ak+k>ak-1+k-1=bk-1>ak-1

2.任意操作都可以将奇异局势变为非奇异局势

1)如果当前局势为(x,y)  如果选择改变其中一个分量,那么由于另外一个分量不变,所以不可能变为另外一个奇异局势。

2)如果x,y同时改变,由于其差值不变,因此也不会变为另一个奇异局势。

3.用适当的方法可以将非奇异局势变为奇异局势

结论:对于一个奇异局势(ak,bk)  我们可以发现  ak=k*(sqrt(5)+1)/2  【黄金分割比】  而bk=ak+k 
因此 如果(bk-ak)*  (sqrt(5)+1)/2 =ak,那么就是奇异局势(必败局势)。

#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
 int a,b;
 while(scanf("%d%d",&a,&b)!=EOF)
 {
  if(a>b)
  {
   int t=a+b;
   a=t-a;
   b=t-a;
  }
  int c=b-a;
  if(a==(floor((sqrt(5.0)+1)/2*c)))
  {
   printf("0\n");
  }
  else
  { 
   printf("1\n");
  }
 } 
 return 0;
}


4.妮姆博弈

问题描述:N堆物品,两个人轮流从某一堆中取任意多的物品。
三堆的妮姆博弈的基本奇异局势(0,0,0)  (0,n,n)   对于第二个来说,如果当前者在某一堆中取了x,另一个人可以在另一堆中取x使得第一个人再次面对  (0,n,n) 。所以可以猜测,妮姆博弈的奇异局势的特点为,每堆个数抑或起来结果为0。如果不为0的话,假设前n-1堆抑或的结果为x,只要将最后一堆变为x就可以了。
结论:抑或结果为0是奇异局势,面对其者必败。

猜你喜欢

转载自blog.csdn.net/qq_39304630/article/details/79768958