筆記 簡單博弈

2022-04-07 23:41:52 字數 2318 閱讀 9167

大半年前寫的東西了,自己真的在走下坡路

a , b進行遊戲。a先開始,輪流將n減去中的乙個數,誰最後無法進行減法了,就輸了。

給定n。a,b都採用最優策略,問a是否會贏。

設f[i]表示當前的數是i的時候,對於當前的先手來說是否會贏

f[i]=true,則贏

f[i]=false,則輸

當先手a操作一次後,問題轉移為了對於當前先手b,對(n-i)進行操作

必勝轉移到必敗,必敗轉移到必勝

就是說從f[i]轉移到的所有狀態f[i-2],f[i-3]..f[i-6]如果都是必勝態,那麼f[i]則為必敗態

從f[i]轉移到的所有狀態f[i-2],f[i-3]..f[i-6]如果都是必敗態,那麼f[i]則為必勝態

f[0]和f[1]對於先手來說必敗

f[0]=false,f[1]=false

f[2]則對於先手來說必勝,f[2]=true

前幾天上數學課的時候老師講了乙個類似的題,當時想到了dp。

當n%8=1或0時,必敗。否則必勝

博弈dp解決的是兩人輪流操作,且沒有平局的 #兩人博弈遊戲#

寫**的話一般是#人人為我#型別,即用其他狀態向自己轉移

更一般的,博弈沒有固定搜尋順序,習慣用記憶化搜尋

f[i][j]表示當前手上數字為i,上乙個減去的數是j的時候是必勝還是必敗

f[i][j]轉移到f[i-r][1~r],其中1<=r<=k*j

o(n^3)

沒有**

a,b兩人遊戲,現在有a1,a2,...an共n個數, 輪流操作,每次可以對任意乙個數操作,最後誰無法操作誰就輸了。操作為將這個數減去中的乙個。

範圍:n<=\(10^5\),a_i<=\(10^5\)

相當於有n個#二人博弈問題#,稱之為#組合二人博弈問題#

初始蒟蒻

設計乙個n維的f[1][2][3]...[n],表示當前態

這玩意肯定不行,所以要用sg

設s 表示乙個非負整數集合。定義mex(s)為求出不屬於集合s 的最小非負整數的運算。即:

mex(s) = min, 比如mex = 1

sg[i]表示的是數字i這個狀態的sg值

sg值:取出所有能轉移到的sg值的前繼狀態集合,則i的sg函式的值為這個集合的mex運算結果,即sg=mex

必敗態的sg為0,必勝態的sg值為非零

對於這個題,sg[0]必敗,所以s[0] = 0,s[1]的前繼狀態的集合為,所以sg[1] = 1

sg[2]的前繼狀態集合為,sg[2] = 2

sg[3]的前繼狀態集合為,sg[3] = 3

sg[4] = 4,sg[5] = 5,sg[6] = 6

sg[7]的狀態集合為,sg[7] = 0

sg[8] = 1,sg[9] = 2

事實上,對於sg[8]和sg[9],先手必須把狀態轉移到sg[7],讓下乙個人必敗

對於這個題,有sg值就可以不用n維了嗎?不行。他還是這個樣子:

sg[a1][a2]...[an]

n個遊戲的sg值 等於 每個遊戲的sg值異或起來

sg(a1,a2...an) = sg(a1) xor sg(a2) ... xor sg(an)

所以我們分開討論每個遊戲,最後異或起來

沒有**

n <= \(10^5\) a_i <= $10^9¥

n+1堆石子,最左邊一堆石頭有2012個,兩個人分別進行操作。一次操作可以選取兩堆不同的石堆分別增加或減少乙個石子(一加一減,或給已經不剩石子的堆加乙個都是允許的)。為了保證遊戲會在有限步內結束,規定所選的兩堆中右邊的那一堆一定要包含奇數個石子,無路可走者輸.問先手是否必勝?

除了最左邊,每一堆都是偶數個石子,所以不討論每一堆的實際個數,只討論奇偶

a1,a2...an等於0或1

不關心石子個數,只關心奇偶

因為獨立的是石子而不是石子隊

因為我們的遊戲單位是石子,兩個石子的sg值相互抵消為0,所以只關心奇偶

nim的遊戲單位是石子堆

sg[i]在第i堆的石子的sg值

sg[i] = mex(sg[j]^sg[k])

鈕扣 (簡單博弈)

題目位址 類似以前的簡單博弈,只有一對由k數量的石頭,每次最多取l次,求後手獲勝的概率 當k l 1 0,後手獲勝,現在求解l,列舉一下就行了。沒了解為什麼可以 去學一下那個簡單博弈 巴什博弈 define ios ios sync with stdio false cin.tie 0 cout.t...

簡單博弈結論

最少取1個,最多取m個,沒石子可取的人輸 若 n mod m 1 0 則先手必勝 沒石子可取的人輸 異或和!0,則先手必勝。否則先手必敗 最終把石子取光的人輸 分類討論 全為1 偶數堆則先手必勝 不全為1 異或和!0,則先手必勝 沒法再推的人輸 選奇數字置nim 奇 偶相當於拿走。偶 奇,先手再把同...

簡單博弈之巴什博弈

例題 guns和roses是兩個好朋友,這一天他們比賽吃葡萄。假定他們有ans顆葡萄。在比賽之前他們會首先確定每次吃葡萄的數量的最大值為s,和ans的具體值。兩個人輪流吃葡萄,每次最多吃s顆,不能不吃。即假定每次吃m顆葡萄,則 1 m s 遊戲規定在誰吃完葡萄後,他們兩個人所吃的葡萄總和等於ans,...