博弈論模板

2021-08-10 21:20:26 字數 936 閱讀 1508

原部落格位址

一.  巴什博奕(bash game):

a和b一塊報數,每人每次報最少1個,最多報4個,看誰先報到30。這應該是最古老的關於巴什博奕的遊戲了吧。

其實如果知道原理,這遊戲一點運氣成分都沒有,只和先手後手有關,比如第一次報數,a報k個數,那麼b報5-k個數,那麼b報數之後問題就變為,a和b一塊報數,看誰先報到25了,進而變為20,15,10,5,當到5的時候,不管a怎麼報數,最後乙個數肯定是b報的,可以看出,作為後手的b在個遊戲中是不會輸的。

那麼如果我們要報n個數,每次最少報乙個,最多報m個,我們可以找到這麼乙個整數k和r,使n=k*(m+1)+r,代入上面的例子我們就可以知道,如果r=0,那麼先手必敗;否則,先手必勝。

巴什博奕:只有一堆n個物品,兩個人輪流從中取物,規定每次最少取乙個,最多取m個,最後取光者為勝。

**如下:

#include using namespace std;

int main()

if(temp==0) cout<<"後手必勝"<

四.  斐波那契博弈:

有一堆物品,兩人輪流取物品,先手最少取乙個,至多無上限,但不能把物品取完,之後每次取的物品數不能超過上一次取的物品數的二倍且至少為一件,取走最後一件物品的人獲勝。

結論是:先手勝當且僅當n不是斐波那契數(n為物品總數)

如hdu2516

#include #include #include using namespace std;

const int n = 55;

int f[n];

void init()

{ f[0] = f[1] = 1;

for(int i=2;i>n)

{ if(n == 0) break;

bool flag = 0;

for(int i=0;i

模板 數學 博弈論

1.要從必勝或必敗的局面反推 2.sg函式 只要當前狀態可以轉移到的狀態中有乙個是敗態,那麼當前狀態就是勝態。勝態為n。如果當前狀態可以轉移到的所有狀態都是勝態,那麼當前狀態就是敗態。敗態為p。sg函式為每個狀態賦乙個自然數的值,這個值為除這個狀態的後繼外的最小自然數。首先定義mex minimal...

博弈論 Nim博弈

1.nim博弈的起源很早,至於歷史我們就不再說了,直接說它的使用場景。1 依舊是兩個人博弈,但是物品時n堆,每一堆有ai個。2 每個人可以挑選一堆取走若干個,但是不能不取。3 最先取完所有物品的人獲勝。4 結論 所以堆的物品的數量異或起來是0,先手必敗。2.乙個nim博弈的例項 nim博弈。乍一看這...

博弈論 博弈混合

給你乙個n m的棋盤,然後給你4種棋子,分別是 1.王 能橫著走,或者豎著走,或者斜著走,每次可以走1格 2.車 可以橫著走或者豎著走,每次可以走無數格 3.馬 走日字形,例如 如果現在在 1,1 可以走到 2,3 即先走一格直線,然後斜著走一格 4.王后 可以橫著走,或者豎著走,或者斜著走,每次可...