【博弈论】

来源:互联网 发布:买域名多少钱 编辑:程序博客网 时间:2024/05/02 06:44

推荐:wutianqi‘s blog

寻找平衡状态(也称必败态,奇异局势),(满足:任意非平衡态经过一次操作可以变为平衡态)

(一)巴什博奕(Bash Game):

只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取p个,最多取q个.最后取光者得胜.

n = (m+1)r+s , (r为任意自然数,s≤m), 即n%(p+q) != 0, 则先取者肯定获胜(默认最后一个取的为win)

可以这样想:

如果满足m%(n+1)==0,则先手败(必败态),因为可以这样分析:每轮后手总可以造出n+1这样的情况,最后明显是后手必胜。

但是当m%(n+1)!=0,则先手要不败就应该取m%(n+1)的余数,因为当第一次先手取了这个余数后,剩下的就变成了后手的必败态。


(二)威佐夫博奕(Wythoff Game):

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

(ak,bk)(ak ≤ bk,k=0,1,2,...,n)表示奇异局势

求法:

ak =[k(1+√5)/2], bk= ak + k (k=0,1,2,...,n 方括号表示取整函数)

    判断:

       Gold=(1+sqrt(5.0))/2.0;

1)假设(a,b)为第k种奇异局势(k=0,1,2...) 那么k=b-a;

2)判断其a==(int)(k*Gold),相等则为奇异局势

(注:采用适当的方法,可以将非奇异局势变为奇异局势.

假设面对的局势是(a,b)

若b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);

1.      如果a = ak,

1.1  b > bk, 那么,取走b - bk个物体,即变为奇异局势(ak, bk);

1.2  b < bk 则同时从两堆中拿走 ak – a[b – ak]个物体,变为奇异局势( a[b – ak] , a[b – ak]+ b - ak);

2         如果a = bk ,

2.1  b > ak ,则从第二堆中拿走多余的数量b – ak

2.2  b < ak ,则 若b = aj (j < k) 从第一堆中拿走多余的数量a– bj; (a >bj)

若b= bj (j < k) 从第一堆中拿走多余的数量a– aj; ( a > aj)

例题:pku 1067

(三)尼姆博奕(Nimm Game):

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

异或为0,后手胜;异或为1,先手胜。(不区分是否最后一个取的为win)

ps:异或:相同为假,不同为真。

任何奇异局势(a,b,c),要如何变为奇异局势呢?假设a<b<c,我们只要将c

例题:pku 2234

例题:hdu 1730

例题:pku 1740

例题:pku 1704

例题:pku 1082 (大量分析… 结论很简单。 也可以根据简单的推论模拟实现。)