一、巴什博弈
巴什博弈的题目一般是有一堆物品共n个,两个人轮流取物品,每次只能取1~m个。最后取光者胜利。
解题方法:
res=n%(m+1);
若res=0,则先取者必败,反之,后取者必败。
拓展:
若题目为先取完者失败,则res=(n-1)%(m+1);
当res=0时后取者胜利。
二、威佐夫博弈
威佐夫博弈题目一般有两堆数量若干的东西,两个人轮流从某一堆或同时从两堆中取同样多的物品。
规定每次至少取一个,多者不限,最后取光者得胜。
解题方法:
面对非奇异局势,先拿者必胜,反之,后拿者取胜。
对于奇异局势的判断:
若两堆东西的数量(a,b)满足
ak=[k(1+sqrt(5.0))/2];
bk=ak+k;
则此时局面为奇异局势。
三、Nim博弈
有三堆(或多堆)若干个物品,两个人轮流从某一堆取任意多的物品。
规定每次至少取一个,多者不限,最后取光者得胜。
解题方法:
将所有堆物品的数量进行异或操作,最后结果若为0,则先取者必败,结果非零,则先取者必胜。
四、公平组合博弈
SG函数:
int f[N],SG[MAXN],S[MAXN];
void getSG(int n)
{
memset(SG,0,sizeof(SG));
for(int i = 1; i <= n; i++)
{
memset(S,0,sizeof(S));
for(int j = 0; f[j] <= i && j <= N; j++)
S[SG[i-f[j]]] = 1;
for(int j = 0;; j++)
if(!S[j])
{
SG[i] = j;
break;
}
}
}