基礎博弈整理小記

由於一見到博弈題就很懵逼,很多時候連暴力都不會打,所以就去學習了一發博弈,於是在某天的比賽中發現自己終於會打暴力了。

基本知識

我目前接觸的博弈一般都是符合策梅洛定理的博弈模型,即符合以下幾個條件:
1.雙人回合制
2.信息完全公開
3.沒有隨機因素
4.必然在有限步數內結束
5.沒有平局、
那麼,對於每一種狀態,要麼先手必勝,要麼後手必勝
可以把狀態分爲必勝點和必敗點,即不管怎麼操作都必然會勝利(會失敗)的點
顯然地,從某一個必勝點出發,一定可以轉移到一個必敗點
而從某一個必敗點出發,則一定不可以轉移到必勝點

幾種基本模型

1.巴什博奕
2.威佐夫博弈
3.斐波那契博弈
4.k倍動態減法博弈
5.尼姆博弈

巴什博奕

最簡單的模型就是:
有一堆石子,總共有n個,每一次可以拿走1-m個石子,最先拿完石子的人勝利
基本解法:
注意到,如果只有m+1個石子,那麼無論怎麼樣先手必敗,而如果輪到後手的時候有m+1個石子,則是先手必勝。
那麼,我們把n表示爲n=k*(m+1)+r的形式
此時,如果r不爲0,則先手有必勝策略,即第一步拿走r個石子,之後每一步後手拿走k個石子,則先手拿走m+1-k個,那麼顯然先手可以拿走最後一個石子
如果r爲0,那麼後手則可通過進行上述操作來取得勝利
這是一個非常簡單且容易理解的模型
我們也可以通過必勝態和必敗態的轉化關係來研究這個問題
顯然1-m爲必勝態,又因爲m+1只能轉化到必勝態,所以m+1爲必敗態
同理,我們可以推出(m+1)的倍數都是必敗態

這裏有幾道例題
HDU 1846
這是一道模板題沒什麼好說的
HDU 4764
也是一道挺裸的題目,只需要把寫數字的操作看爲取石子即可

威佐夫博弈

有兩堆給定數量的石子,每次可以從一堆中拿走任意多個,或者從兩堆中各拿走相同個數個,最先不能操作的人輸。
我們先研究出幾個必敗態
(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)
我們發現任何一個自然數都會出現並且只會出現一次
ak = [ k * (1 + √5) / 2 ] , ([x]表示對x取整,也就是 (int)x )
bk = ak + k
對於每個必敗態我們有上述公式
那麼就可以解決這個問題了
板子題 HDU1527

斐波那契博弈

有一堆石子,總共有n個,第一次可以取走1到n-1個
之後的每一次,至少取走一個,至多取走上一次取走的二倍
取走最後一個的勝利
這個模型比上一個稍微難一點點,同時這個問題可以衍生出k次動態博弈問題

首先我們要引入一個定理——齊肯多夫定理
任意一個整數m可以表示爲幾個不連續的斐波那契數的和

下面給出一個不太嚴謹的證明
我們可以歸納地證明
顯然對於1,2,3定理是成立的
設該定理對於任意小於m的正整數都成立
若m爲斐波那契數,那麼顯然是成立的
得到m’=m-f(n)

k倍動態減法博弈

有一堆石子,總共有n個,第一次可以取走1到n-1個
之後的每一次,至少取走一個,至多取走上一次取走的k倍
我們可以考慮構造一個類似斐波那契的數組,即滿足

我們需要構造一個數列使得每個整數可以由數列中若干個數相加並且這些數倍數差距大於k,我們用a來存這些數,用b來表示前i-1個能構成的最大的數,那麼a[i+1]=b[i]+1;然後再構造b[i+1],由於b[i+1]要用到a[i+1],並且不相鄰,因此要找到a[j]*k

sg函數

sg函數就是一個把必勝態分級的過程
簡單來說,必敗態的sg值爲零
只能轉移到必敗態的必勝態sg值爲1
只能轉移到1級必勝態和必敗態的sg值爲零
即sg(A)=mex{sg(B) A可以轉移到B}
mex是定義在集合上的一個運算,表示不在集合內的最小非負整數

尼姆博弈

有m堆給定數量的石子,每次可以取走任意數量,最先取完的勝利
首先對於每一堆石子我們可以算出它的sg值
即對於這個模型,sg(x)=x
那麼只需要考慮對於多堆石子的合併問題

sg定理

證明比較複雜
推薦一個鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章