巴什博弈
一堆n个物品,两个人轮流从中取出1~m个,最后取光者胜。
如果n是m+1的倍数,则先手必输。如果不是则先手必胜。
对于先手来说如果不能一步到达必输态则先手必输,反之必胜。0是第0个必输态,m+1是第一个必输态,2*(m+1)是第二个必输态,n*(m+1)是第n个必输态。
if(n%(m+1)==0){
return false;
else
return true;
威佐夫博弈
两堆物品,两人轮流从一堆或者两堆中取相同1~不限个,最后取光者胜。
如果(x,y)满足([],[
])(n
N*),则先手必输。如果不是则先手必胜。
对于先手来说如果不能一步到达必输态则先手必输,反之必胜。设(x,y
)和(y
,x
)为第m个必输态,如果x
或y
在其他必输态的x,y中出现过,则可以一步到达必输态。如果x
=y
,则可以一步到达必输态,并且要使得必败态的x
-y
尽可能小,所以(a
,a
+n)为必败态,
引入Betty定理,a=[na],a
+n=[n(a+1)],可得
,得a=
(a=
舍),所以
([],[
])(n
N*)为第n个必败态。
if(abs(x-y)*((sqrt(5)+1)/2)==min(x,y))
return false;
else
return true;
尼姆博弈
三堆物品,两人轮流取,每次取其中一堆1~不限个,最后取光者胜。
(a,b,c)满足a^b^c=0则先手必输,反之必胜。
if(a^b^c==0)
return false;
else
return true;
斐波那契博弈
一堆物n个,两人轮流取,不能取完,不能取超过上次两倍,最后取光者胜。
n满足斐波那契数列必输,反之必胜。
int a=0,b=1,c=1;
for(int i=2;1;i++){
int d=c;
d=a+b;
a=b;
b=c;
c=d;
if(c==n){
return false;
else if(c>n)
return true;
}
本文介绍了四种常见的博弈论问题在ACM算法中的应用:巴什博弈、威佐夫博弈、尼姆博弈和斐波那契博弈。分析了各种情况下先手玩家的获胜策略,包括必输态和必胜态的判断,并提出了相应的胜负条件和计算方法。

1282

被折叠的 条评论
为什么被折叠?



