博弈论

一、SG函数

若一个局面S,做一步操作能够到达局面Xi
则一个局面S的SG函数值SG(S),为除所有SG(Xi) 以外的最小非负整数

那么最经典的NIM游戏中,n堆石子,可拆分为n个子博弈,总的SG函数值为所有博弈SG值的异或和;考虑一个堆中石子数为x,则下一步能到0,1,2,…x-1,所以每一个x的SG值就是它本身;因此经典NIM游戏的SG函数值就是所有堆石子的异或和

SG函数值模板

int get_SG(int x)
{
    bool v[Tmax];               //注意v不能为全局变量 
    if(SG[x]!=-1) return SG[x];
    memset(v,0,sizeof(v));
    int tmp,i;
    for(i=1;i<=x;i++)
    {
        tmp=get_SG(max(0,i-3)) xor get_SG(max(0,x-i-2));
        v[tmp]=true;
    }
    for(i=0;i<=n;i++)
      if(v[i]==false)
        return SG[x]=i;
}

二、Sprague-Grundy定理

博弈的和=多个独立子博弈的析取和

三、Nim博弈

n堆每堆若干物品,两人轮流取,每次可以从任一堆取任意数目,最后取光者胜。
结论,若n个数的异或和(xor)为0,则先手败。

四、巴什博弈

一堆n个物品,两人轮流取,每次至少取1个,最多取m个,最后取光者胜,无法操作者输。
结论,若n%(m+1)==0,则先手败。

五、威佐夫博弈

2堆物品,两人轮流取,要么取任一堆中任意个数,要么在两堆中取相同个数。
结论,设两堆初始为x,y ( x< y),若(int)[(sqrt(5)+1)/2*(y-x)]==x,那么先手败。

六、斐波那契博弈
一堆n个石子,两人轮流取,满足以下规则:
1. 先手第一次不能把所有石子取完
2. 之后每次取的石子数 ∈ [1,对手刚取的石子数*2]
3. 取光者胜
结论,n是斐波那契数,则先手败。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值