博弈论

1 篇文章 0 订阅
1 篇文章 0 订阅

听很多朋友说天行九歌比较好看
嗯嗯嗯( ̄▽ ̄)~* 经不住诱惑的俺也开始了追剧
看了几集后,发现了许多有关博弈论剧情
下面的三姬分金就是一个经典的博弈论,也是著名的“海盗博弈论”
在这里插入图片描述
韩非跑到大将军处要军饷,发现大王的三个妃子正在玩抢金币游戏,一共100枚金币看谁抢的多,韩非觉得这个游戏玩的没意思,为了增加游戏的刺激性,他提议:
我们定一个游戏规则,按顺序甲乙丙依次进行分金币的提议,由抽签决定谁先谁后,如果提议未获得半数以上通过(不包括半数),那么此人将被处死,如果获得了半数以上通过,那么就按照她的提议执行。

我们假定甲乙丙都足够的聪明,要在获得金币的前提下保证自己的存活。

我们可以假设甲的提议未通过,然后被处死,剩下乙丙两人,不管乙怎么分配,丙都不会通过乙的提议,所以乙为了保证自己存活肯定会接受甲的提议。因为她们都是足够的聪明,所以甲是知道乙会接受自己的提议的,当然,为了保证乙不会自己鱼死网破,甲会给乙1枚金币,自己拿了99枚金币。
所以说,甲99枚,乙1枚,丙0枚就是最终的结果了。
在这里插入图片描述
下面总结我们比较常见的四种博弈:

1. 巴什博弈
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜。
显然,每轮拿的最多的是m+1个,因为一次最多只能拿m个,所以无论第一个人拿了多少,后者都能一次拿走剩余的物品。所以,只要给对手拿到m+1的倍数,就能获胜。

//核心代码
if(n%(m+1==0))
    cout<<"后者获胜"<<endl;
else
    cout<<"前者获胜"<<endl;

2. 威佐夫博弈
有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。
我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势。局势分为奇异局势和非奇异局势,前几种奇异局势有(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15),像这种局势先取人必输,反之,非奇异局势,先取人必胜。所以解题的核心就是判断是否为奇异局势。
判断奇异局势的方法:看两个数的差值t是不是满足 (sqrt(5)+1)/2*t==min(n1,n2)

//核心代码
if(n1>n2)
  swap(n1,n2);
 x=floor((n1-n2)*(1+sqrt(5.0))/2.0);//floor函数向下取整
        if(x==n1) cout<<"后手必胜"<<endl;  
        else cout<<"先手必胜"<<endl;

3. 尼姆博弈
有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。
这种博弈的核心思想就是:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜。(哈哈哈 我记住的就是这个!)

//核心代码
x=0;  
for(int i=0;i<n;i++)  
   {  							
        cin>>ans;  
        x^=ans;  
    }  
if(x==0)  
        cout<<"后手必胜"<<endl;  
else
        cout<<"先手必胜"<<endl;  

4. 斐波拉契博弈
有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。
核心思想是:先手胜当且仅当n不是斐波那契数。

//核心代码
int f[n];
f[0]=f[1]=1;
for(int i=0;i<=n;i++)
{
       f[i]=f[i-1]+f[i-2];
}

int flag=0;
for(int i=0;i<n;i++)    
        {    
            if(f[i] == n)//判断n是不是斐波那契数
            {    
                flag = 1;
                break;
            }    
        }    
        if(flag==1)
            cout<<"后者胜"<<endl;
        else
            cout<<"前者胜"<<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值