博弈

一、巴什博弈

 巴什博弈的题目一般是有一堆物品共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;
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值