巴什博弈

幽靈軒發表於2020-10-24

一般對於這類博弈類的題目,都有一個條件:“兩人足夠聰明”或者"兩人沒有失誤"

硬幣遊戲

想必大家小時候都有玩過這麼一個遊戲

兩個人博弈,每個人每次可以拿1-3枚硬幣,輪流拿,總共n枚硬幣,最後取光者勝,這就是一個很典型的巴什博弈

對於上面的取硬幣問題,我們舉三個例子
不妨設甲是先手,乙是後手

  1. 總共4枚硬幣,甲無論怎麼取都是輸
  2. 總共5枚硬幣,甲只要第一次取1枚硬幣,乙無論怎麼取,甲都是贏
  3. 總共4n枚硬幣,甲無論怎麼取都是輸,甲每次取x枚,乙接著取4-x枚,乙就一定能贏

這就是一個很典型的巴什博弈

巴什博弈

巴什博弈(Bash Game):只有一堆n個物品,兩個人輪流從這堆物品中取物,規
定每次至少取一個,最多取m個。最後取光者得勝。

顯然,如果\(n=m+1\),那麼由於一次最多隻能取\(m\)個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現瞭如何取勝的法則:如果\(n=(m+1)*r+s\),(\(r\)為任意自然數,\(s\le m\)),那麼先取者要拿走\(s\)個物品,如果後取者拿走\(k(k\le m )\)個,那麼先取者再拿走\(m+1-k\)個,結果剩下\((m-1)\times (r-1)\)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下\(1. (m+1)\)的倍數,就能最後獲勝。

巴什博弈博弈論裡面最簡單的一種形式。以下題目利用巴什博弈可以輕鬆解決:

  1. http://acm.hdu.edu.cn/showproblem.php?pid=1846 (brave game)

  2. http://acm.hdu.edu.cn/showproblem.php?pid=2147 (kiki's game)

  3. http://acm.hdu.edu.cn/showproblem.php?pid=2149 (public sale)

  4. http://acm.hdu.edu.cn/showproblem.php?pid=2188 (選拔志願者)

下面介紹分析此類題目的通用方法:P/N分析:

P點: 即必敗點,某玩家位於此點,只要對方無失誤,則必敗;

N點: 即必勝點,某玩家位於此點,只要自己無失誤,則必勝。

以上題目均可以通過P/N分析法來解決。

例如上面的硬幣問題,4的倍數點都是P點,其他點都是N點

三個定理

一、所有終結點都是必敗點P(上游戲中,輪到誰拿牌,還剩0張牌的時候,此人就輸了,因為無牌可取

二、所有一步能走到必敗點P的就是N點

三、通過一步操作只能到N點的就是P點

程式碼實現

bool Bash_Game (int n,int m){//判斷先手是否必贏
	if(n%(m+1)==0)return false;
	else return true;
}

本文參照:https://www.cnblogs.com/java20130726/archive/2013/05/24/3218207.html

相關文章