博弈入门(巴什博弈、斐波那契博弈、威佐夫博奕)

什么是博弈?

博弈论(Game Theory),博弈论是指研究多个个体或团队之间在特定条件制约下的对局中利用相关方的策略,而实施对应策略的学科。有时也称为对策论,或者赛局理论,是研究具有斗争或竞争性质现象的理论和方法,它是应用数学的一个分支,既是现代数学的一个新分支,也是运筹学的一个重要学科。目前在生物学、经济学、国际关系学、计算机科学、政治学、军事战略和其他很多学科都有广泛的应用。主要研究公式化了的激励结构(游戏或者博弈(Game))间的相互作用。(摘)
其实博弈论是二人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜的目的。

巴什博弈

只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
显然,如果n=m+1,1那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:每个回合时m+1个,如果n=(m+1)*r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。策略就是我们在第一次取走一定的数,留下来的数恰好是(m+1)的倍数;

hdoj1846

题目链接:hdoj1846

大致题意:两个人取走n个石头,每次只能够去1…m个,在两个人每一步都是对自己最有利的条件下,根据所给的n,m的大小,算出谁能够必胜?
由巴什博弈的基本原理得:倘若第一个人人拿走了X个,(1<=x<=m),剩下的个数满足是(m+1)的整数倍时,第一个人就有了必胜的把握,反之第二个人必胜;

#include 
using namespace std;

int main() {
    int t,n,m;
    cin>>t;
    while(t--) {
        cin>>n>>m;
        int mod=n%(m+1);//mod 必定是小于m+1的
        if(mod>=1) cout<<"first" <else cout<<"second"<return 0;
}

斐波那契博弈

威佐夫博奕

威佐夫博弈的实质就是找到奇异局势
其中有三种定理:
1.任何自然数都包含在一个且仅有一个奇异局势中
2.只需要一步便可以将奇异局势与非奇异局势互换
两个人谁在第一次出手的时候为奇异局势,该人必败

===============坑================

你可能感兴趣的:(博弈)