各種常見的博弈論 簡單例題

2021-09-25 17:09:36 字數 1408 閱讀 2828

斐波那契博弈

有一堆個數為n(n>=2)的石子,遊戲雙方輪流取石子,規則如下:

1)先手不能在第一次把所有的石子取完,至少取1顆;

2)之後每次可以取的石子數至少為1,至多為對手剛取的石子數的2倍。

約定取走最後乙個石子的人為贏家,求必敗態。

結論:當n為fibonacci數的時為必敗態。

即將斐波那契數列打表再判斷n是否為斐波那契數判斷即可

例題:hdu - 2516 取石子遊戲

(我這裡打表了,time是0 哦豁)

#include #define endl '\n'

#define inf 1e9+7

#define ll long long

#define ull unsigned long long

using namespace std;

long long feibonaq[100]=;

int main()

if(tmp==0) cout<<"no"<乘法博弈

2 個人玩遊戲,從 1 開始,輪流對數進行累乘,直到超過乙個指定的值m時,該玩家獲勝。

如果乘數範圍是2~n,

則如果m為2~n,則先手必勝。

如果是n+1~2×(上乙個後範圍),則後手必勝,因為無論第一次先手乘的數是什麼,數必在2到n之間

結論:必勝態對稱,於是將m不斷除與2n,判斷餘數在2到n還是n+1到2n之間即可

例題:poj - 2505 a multiplication game

#include //#include #define endl '\n'

#define inf 1e9+7

#define ll long long

#define ull unsigned long long

using namespace std;

int main()

if(n<=9) cout<<"stan wins."<環形博弈

n個石子圍成乙個環,每次取乙個或者取相鄰的2個。

證明:以後再寫(

結論:石子數目小於等於2 先手勝,其他 後手勝。

例題:poj - 2484 a funny game

#include //#include #define endl '\n'

#define inf 1e9+7

#define ll long long

#define ull unsigned long long

using namespace std;

int main()

}

簡單博弈論

這道題目的意思就是說給你乙個n m的格仔,每次只能從右上角出發,只能往下,往左,往左下角走,每次只能走一步,誰不能走了,誰就輸。其實就是誰先到達左下角,誰就贏了,輸出先手kiki的輸贏情況。這道題的ac 特別簡單,將n和m乘起來,判斷奇偶,然後輸出即可,第一次做的時候,沒反應過來就過了,現在補充一下...

簡單博弈論

1.巴什博弈 問題描述一般為,有一堆物品,有n個,a b輪流從中取物,最少取乙個,最多取m個,規定取走最後一堆的人獲勝。對於博弈問題,首先需要分析的是它的必敗情況。由題目可知,假設當前的人a面對的物品堆已空,即為0時,就輸了,所以最基本的必敗為0。那麼根據取物品的取值為1 m,可以知道,在上一步b取...

常見博弈論總結

個人 傳送門 由於博弈論算是一種比較玄學的東西,證明和思想也不是很好理解,這裡只歸納幾種常見博弈論的結論和相關題目。巴什博奕 bash game 只有一堆n個物品,兩個人輪流從中取物,規定每次最少取乙個,最多取m個,最後取光者為勝。必定可以寫成該式子 n k m 1 r 結論 若r 0,則先手必敗,...