演算法 簡單博弈論

2022-08-19 08:03:12 字數 1170 閱讀 3125

僅有一堆n個物品,兩個人輪流取1~m個,最後取的人勝(不能取的人輸)

總體可分幾種情況

int bash_game(int n,int m)    //是否先手有必贏策略

將一堆變為多堆;

即:有3堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取1個,多者不限,最後取光者得勝。

本部分含其他部落格內容

首先自己想一下,就會發現只要最後剩兩堆物品一樣多(不為零),第三堆為零,那面對這種局勢的一方就必敗

尼姆博弈模型可以推廣到:有n堆若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。

這個遊戲中的變數是堆數k和各堆的物品數n1,n2,……,nk。

對應的組合問題是,確定先手獲勝還是後手獲勝以及兩個遊戲人應該如何取物品才能保證自己獲勝

為了進一步理解nim取物品遊戲,我們看看特殊情況。

如果遊戲開始時只有一堆物品,先手則通過取走所有的物品而獲勝。現在設有2堆物品,且物品數量分別為n1和n2。遊戲者取得勝利並不在於n1和n2的值具體是多少,而是取決於它們是否相等。

$2^=8$

$2^=4$

$2^=2$

$2^=1$

大小為7的堆01

11大小為9的堆10

01大小為12的堆11

00大小為15的堆11

11由nim博弈的平衡條件可知,此遊戲是乙個非平衡狀態的nim博弈,因此,先手在按獲勝策略一定能夠取得最終的勝利。具體做法有多種,先手可以從大小為12的堆中取走11枚硬幣,使得遊戲達到平衡(如下表)

$2^=8$

$2^=4$

$2^=2$

$2^=1$

大小為7的堆01

11大小為9的堆10

01大小為12的堆00

01大小為15的堆11

11之後,無論後手如何取子,先手在取子後仍使得遊戲達到平衡

同樣的道理,先手也可以選擇大小為9的堆並取走5枚硬幣而剩下4枚,或者,先手從大小為15的堆中取走13枚而留下2枚

int nimm_game(int n)   //假設n個數存在陣列f中,有必勝策略返回1

簡單博弈論

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

簡單博弈論

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

博弈論演算法

複習 兩個頂尖聰明的人在玩遊戲,有一堆n個石子,每次每個人能取 1,m 個石子,不能拿的人輸,請問先手與後手誰必敗?結論 通過上面的分析可以得出結論 當n能整除m 1時先手必敗,否則先手必勝。兩個頂尖聰明的人在玩遊戲,有nn堆石子,第ii堆有aiai個,每人每次能從一堆石子中取任意多個石子但不能不取...