ACM 博弈专题(5种模板)
最近算法課在學博弈論的知識,順手把算法題中的涉及到博弈論一并總結了
這篇文章的有些內容是參考了大佬的
可能有遺漏。。。。
(一)巴什博弈(BAsh Game)
題目模板
- 只有一堆n個物品
- 兩個人輪流取,每次只能取1~m個物品,誰先取完,誰勝利;(n,m是輸入的隨機數)
解題思路
?當 n = k*(m + 1) + r 時 ? ? ? ? ? (k,r,s都是未知的整數)
?當 n = k*(m + 1) + r 時 (k,r,s都是未知的整數)
?先取者拿走 r 個,那么后者再拿(1~m)個
? 此時 n =(k-1)*(m+1)+s
?先取者再拿走s 個 最后總能造成 剩下n=k*(m+1) 的局面
?若n=k*(m+1) 那么先取者必輸
若n=k*(m+1) 那么先取者必輸
求解巴什博弈函數
樣題:HDU 2147 kiki's game? ? ? ? ? ??HDU 2149 Public Sale? ? ? ? ??HDU 1846 Brave Game?? ? ??HDU 2188 悼念512汶川大地震遇難同胞——選拔志愿者
?
?
(二)威佐夫博奕(Wythoff's game)
題目模板
- 有兩堆各若干個
- 兩個人輪流從某堆或同時從兩堆取同樣多的物品
- 規定每次至少取一個,多者不限,最后取光的人勝利
解題思路
- 兩堆石子的狀態為 [a,b] (滿足a<=b)
- 當 a=(k*(√5+1)/2), b=a+k 時滿足奇異局勢,那么則先手輸,反之則先手贏
求解威佐夫博奕函數
樣題:HDU 1527 取石子游戲?? ? ? ? ??HDU 2177 取(2堆)石子游戲
?
?
(三) 尼姆博奕(Nimm's Game)
題目模板
- 有多堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取一個,多者不限,最后取光者得勝。
解題思路
-
用0與每個數異或,如最后結果為0,則后手勝
-
設一數組a[n][m],令sum=0
-
循環與數組每一個數據異或(sum^=a[i][j])
-
?sum最后等于0則后手勝
???????求解尼姆博弈函數
a[m]每堆物品的數量? sum=0
樣題:HDU 1850 Being a Good Boy in Spring Festival
? ? ? ? ? ?HUD 1907 John?? ? ? ?HDU 2509 Be the Winner
? ? ? ? ? ?HDU 1849 Rabbit and Grass
?
?
(四) 斐波那契博弈
題目模板
- 有一堆個數為n的石子,游戲雙方輪流取石子,
- 滿足:
- 先手不能在第一次把所有的石子取完;
- 之后每次可以取的石子數介于1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)
求解斐波那契博弈函數 f[50]
樣題:HDU 2516 取石子游戲
?
?
(五) 環形博弈
題目模板
- n個石子圍成一個環,每次取一個或者取相鄰的2個(每個石子有序號)
???????求解
- 石子數<=2先手贏,否則后手贏
總結
以上是生活随笔為你收集整理的ACM 博弈专题(5种模板)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 容器技术之Dockerk8s知识笔记
- 下一篇: 计算机专业英语的理解,计算机专业英语之理