sg函式的計算方法:
乙個局面的sg為mex
mex運算為集合中沒出現的最小的自然數
幾個局面的和的sg為單個的sg亦或
sg不為0時先手必勝,sg為0時後手必勝
1.nim game
最為經典
n堆石子,每次可以從一堆裡面取任意個石子
對於一堆石子,sg函式就是石子數
整個遊戲的sg函式是每一堆石子的sg函式的亦或和
必勝:sg不為0
必敗:sg為0
2.bash game
每次最多取m個石子,其他同nim
一堆石子的sg函式為石子數mod(m+1)
整個遊戲的sg函式是每一堆石子的sg函式的亦或和
必勝:sg不為0
必敗:sg為0
3.nimk game
每次最多可以同時從k堆石子進行操作,這k堆可以取不同數量的石子
一堆石子的sg函式為石子數
對每乙個二進位制位單獨算,求sg函式每乙個二進位制位1的個數mod(k+1),如果都為0,則必敗,否則必勝
證明:對於必敗態不管怎麼走都只能走到必勝態
對於變化的sg的最高位,你至少變化為1,最多變化為k,所以這一位1的個數不可能mod(k+1)還是為0
對於必勝態我們肯定可以找到一種方法走到必敗態
我們從高位往低位做,記s為這一位可以隨意填值的數字個數(如果把某一位從1變成0,那麼更低位就能隨便取值了)
假設我們現在做到第k位,記n為除了能隨便取值的s位以外這一位1的個數mod(k+1)
如果n+s<=k,那麼很簡單,我們取出n個第k位為1的讓這些數字的第k位變成0,那s個數字這一位也變成0,然後s+=n
如果n+s>k,即n+s>=k+1,那麼s>=k+1-n,我們在s中間取k+1-n個變為1,其他變為0就可以滿足條件了
4.anti-nim game
不能取石子的一方獲勝
必勝:sg不為0且至少有一堆石子數大於0,sg為0且每一堆石子數都為1
必敗:其餘為必敗
5.staircase nim
階梯博弈
每次可以從乙個階梯上拿掉任意數量石子放到下一層階梯,不能操作的為輸
sg函式為奇數階梯上的石子的亦或和
如果移動偶數層的石子到奇數層,對手一定可以繼續移動這些石子到偶數層,使得其sg不變
6.wythoff game
有兩堆石子,每次可以從一堆或者兩堆裡拿走一樣數目的石子,不能取的為輸
必敗態為(1,2)(3,5)(4,7)(6,10)...
差為1,2,3,4.....每一對數的第乙個數為前面沒出現的最小的正整數
7.take & break
每次可以把一堆石子分成兩堆甚至多堆不為0的石子,不能操作的為輸
暴力計算sg
8.樹上刪邊遊戲
給定根節點,每次可以刪掉一條邊,不與根節點相連的部分刪除
葉子節點sg為0,其他節點的sg函式為子樹sg+1的亦或和
證明:將子樹sg+1看做石子數(我們可以定義沒有節點的圖的sg為-1),然後就變成了取石子遊戲
9.無向圖刪邊
規則同樹上刪邊遊戲
結論:把奇環縮成乙個點加一條新邊,把偶環縮成乙個點,不影響sg,然後套用樹上刪邊遊戲
10.翻硬幣遊戲
n枚硬幣排成一排,有的正面朝上,有的反面朝上。
遊戲者根據某些約束翻硬幣(如:每次只能翻一或兩枚,或者每次只能翻連續的幾枚),但他所翻動的硬幣中,最右邊的必須是從正面翻到反面。
誰不能翻誰輸。
需要先開動腦筋把遊戲轉化為其他的取石子遊戲之類的,然後用如下定理解決:
局面的 sg 值等於局面中每個正面朝上的棋子單一存在時的 sg 值的異或和。
證明的基本套路:
必勝局面存在乙個操作到達必敗局面,必敗局面無論怎麼操作都會到必勝局面
各種動態規劃經典模型
1.lis 方法1.n 2 動態規劃 方法2.對上面的動態規劃優化後,發現決策是可以簡單化的,就是一些決策可以直接捨棄掉,對應到搜尋就是剪枝,用二分查詢搞到 n log n 2.lcs 方法1.時間空間均為 n 2 的動態規劃。記 f i,j 為匹配到a的i和b的j.上面可以壓縮一維空間。3.lci...
藍橋杯 火柴遊戲(經典的博弈演算法)
題目 這是乙個縱橫火柴棒遊戲。如圖1,在3x4的格仔中,遊戲的雙方輪流放置火柴棒。其規則是 1.不能放置在已經放置了火柴棒的地方 即只能在空格中放置 2.火柴棒的方向只能是豎直或水平放置。3.火柴棒不能與其它格仔中的火柴 連通 所謂連通是指兩根火柴棒可以連成一條直線,且中間沒有其它不同方向的火柴 阻...
幾個經典的博弈
一 巴什博奕 bash game 只有一堆 n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取 m個。最後取光者得勝。顯然,如果 n m 1 那麼由於一次最多只能取 m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1...