博弈論習題

vj題目彙總
一,
威佐夫博弈題解
(1)HDU 1527(入門)
(2) HDU 2177 (進階1)
(3)51Nod 1185(進階2)
注:進階1中提處理了輸出威佐夫博弈的第一種可行方案的問題;
進階2處理了威佐夫博弈中(黃金比例*大數)精度會損失的問題;
補充:威佐夫博弈中,非奇異局勢可以通過一步找到奇異局勢。
二,
NimK(尼姆)博弈 :
k==1;
(1)HDU 1850 判斷是否獲勝,若第一個人獲勝,輸出他在第一次選擇有幾種不同的選擇方案數;
(2)HDU 2176 ,和(1)類似,不同在於這道題輸出獲勝前提下,輸出第一次之後的(a,b);
(3) HDU 1730 ,將棋盤上棋子的有效可行移動距離變爲Nim中的石子問題,求解
(4)HDU 1849 ,同(3)
(5) POJ 2234 ,入門
(6) POJ 2975,同(1)
(7) ZOJ 3591 (ZOJ沒了,無法提交,但是個入門題)
(8)51Nod 1069 ,入門
(9)51Nod 1661,()
k>1:
Football Game POJ - 2315
NIMk博弈的典型例題;
題目做法:
將題目給的最大的距離轉化爲最大的石子數k,注意將數據向下取整
將題目中給的每一個足球的目標距離,轉化爲石子的數目,向上取整;
問題就變成了:
n個石子堆,每次最多可以選擇k個石子堆,每個石子堆最多可以取s個;
解題方法:統計出每一堆石子數a的每一位,最後對於每一爲取餘(k+1);(這裏又把每一堆石子轉化爲每一個石子,採用了威佐夫博弈的思想)
這裏爲什麼要取餘(k+1)呢?
試想普通的每次只能從一堆石子裏取時,我們採用的時異或操作,最後判斷結構是否不爲0;其實這樣操作就等於堆每一位的和取餘2,最後判斷是否存在一位,取餘後的結果爲1;

3,sg函數
sg(x) 表示x這個局勢的選擇餘地,x的值越大,選擇餘地越大,當x的值爲0時,說明當前節點沒有選擇的餘地,沒有選擇的餘地,又有兩種情況,1,當前節點的子節點的sg值,全大於0,無論該節點如何選擇,都達不到奇異局勢;2,當前節點沒有選擇,即無任何子節點。

對於使用sg函數的題,要理解sg函數的值扮演的角色。

爲什麼sg[x]0,說明該局是奇異局勢,因爲如果sg[x]0,說明x的任何一個子問題都不爲0,所以sg[x]爲0;如果函數sg[x]中存在爲0的子問題,那麼sg[x]不爲0;因爲sg[x]的子問題中存在奇異局勢,說明x是非奇異局勢。
(1)Fibonacci again and again HDU - 1848
打表sg函數;sg函數基本的模板
(2)Digital Deletions HDU - 1404
打表暴力sg函數;
由奇異局勢的點去找到非奇異局勢的點
(3)S-Nim HDU - 1536
sg函數+f數組,注意f數組裏面的數據要進行從大到小的排序。
(4)Stone Game HDU - 1729
動態的變化,dfs找到滿足要求的奇異局勢點即可。
(4)A Multiplication Game HDU - 1517
dfs實現對sg函數的更新,數據爲long long,採用map;
(5)Euclid’s Game HDU - 1525
採用(4)的思路,進行dfs更新,增加的pair來存儲點的關係
(6)Play a game HDU - 1564
採用(4)的思路,進行dfs更新,但是有個問題,直接使用sg函數
的值來判斷的話,會爆內存,但是我們可以發現一個規律,當n時偶數時前者獲勝;但在這裏面sg
1,表示的是奇異局勢,而非 非奇異局勢
(7)HDU1760
這道題使得我對dfs的理解進一步加深,我們dfs的目的是啥?
這個是我們寫dfs之前要想好的,就想用dfs去寫最短路的時候,
你得知道我們得目標是什麼,而這道題得目標就是:
如果我們可以選擇這個點,那麼下一次選擇是奇異局勢,就是
沒有可選擇的地方,我們就可以認爲這個點是非奇異局勢,並返回sg
1;
否者如果這個點以後,所有的選擇都是1,那麼這個點是0;
(8)kiki’s game HDU - 2147
sg打表,如果n和m同時是質數,則先手敗,否則先手獲勝。
(9)Bomb Game HDU - 2873
二維sg函數,理解大問題分解之後的小問題是什麼,要理解小問題如何遞歸到大問題,要理解sg函數代表着什麼。
(10)Stone Game, Why are you always there? HDU - 2999
首先理解這個問題:
給你一個n,代表有n個選擇(可能出現重複的選擇)每個選擇代表每次可以連續取多少個數,然後提供一個m, 代表下面將有m個數據k,每個數據k代表我目前有一條長度爲k的石子,A,B輪流按照上面提供的規則取。

4,巴士博弈
(1)HDU - 2188 ,入門
(2)Brave Game HDU - 1846,入門
(3)Public Sale HDU - 2149,輸出解決方案
//巴士博弈的第一步的解決方案:如果石子的數目m小於或等於每次放置的最大數目n,答案區間[m,n];如果m>n,答案只有m%(n+1);
總的來說,思想就是讓對方在下一步無論如何操作達到奇異局勢,而不是非奇異局勢。
(4)Buttons POJ - 2368
對於給定的最大石子的數目n,求每次可以最大的獲取數m並要求m>=2,使得第二個人獲勝;
方法是判斷n是否是素數,如果n是素數,那麼m ==n-1;
如果n是不是素數,那麼m是n的最小的滿足大於2的因子(是大於2)
n%(m+1);
(5)
Bash遊戲 V2 51Nod - 1067
打sg表發現規律
(6)Bash遊戲 V3 51Nod - 1068
打sg表發現規律,注意題目中n要用字符串的形式存取,
n%3;等於n每一位上的數取餘3再相加的和取餘3;因爲10%3 ==1
(7)邂逅明下 HDU - 2897 巴士博弈的變形
n個石子,最少可以取p個,最多可以取q個,如果少於p個,必須全部取,最後取石子的輸;

這道題由巴士博弈的影子,先來思考一下巴士博弈是什麼?
經典的巴士博弈,n 個石子,至少取1個,至多取m個,無石子可取的輸。
我們的思路是:
n=(m+1)*r+s;
0<=s<=m;
當s==0時,即n%(m+1) 0;後手B獲勝,獲勝的方法是:每次先手A取a個。後手B都去(m+1-a)個石子,這樣到最後先手A無石子可取;
當s>0時,先手A獲勝,獲勝的方法是A先去m個,這樣問題就變成了s
0,B爲先手的情況了。

那我們如果改變一下巴士博弈的規則呢,最後取石子的輸,其餘不變,那麼又該如何獲勝呢?
n=(m+1)*r+s;
0<=s<=m;
當s0時,先手A獲勝,第一次取m個,(第一個m+1對還剩餘1);(每當B取k個,A取(m+1-k)個),最後剩給B的是1個;
{這裏是說從A開始維護,“(每當B取k個,A取(m+1-k)個)”,如果從B開始維護呢?A取k個,B取(m+1-k)個,只要A每次取m個,B最後還是回輸}
當s
1時,後手B獲勝,(第一次A取k個,B取m+1-k個),這樣到最後還會剩餘1個,那麼A失敗;
當s>1時,先手A獲勝,A第一次取s-1個石子,那麼局勢就變成了上面的情況;

那麼我們再討論這個問題:
“n個石子,最少可以取p個,最多可以取q個,如果少於p個,必須全部取,最後取石子的輸;”

那麼p==1,不就是上面的情況了嗎?

n=(p+q)*r+s;;
當s==0,A獲勝,A取q個,(B取a個,A取p+q-a個),最後還剩p個留給B;
當0<s<=p,B獲勝,(A取k個,B取p+q-k個),最後剩給A,s個;
當s>p時,A獲勝,A取(s-p)個,這樣局勢就變成了,B先手,s == p 的局勢了;
5,斐波那契博弈

(1)Bash遊戲 V4 51Nod - 1070
一開始的思路是脫離題目本身的,去像Stone Game HDU - 1729這道題一樣,去尋找分割點,但是這道題不存在這樣的結果,試圖去尋找規律,從樣例中可以看出,幾個答案滿足斐波那契數列的規律,繼續驗證後面的數據,任然滿足
(2)取石子游戲 HDU2576
打表,發現斐波那契數列的規律
6,對偶博弈
(1)
No Gambling HDU - 3863
水題,先手一定勝,因爲每一次A的選擇都是明確的,而,B的選擇都是在A後面
,做出的補救措施。
(2)Coin Game HDU - 3951
先處理特殊情況,(1)k 1,n%2;(2)k>=n;(3)—;
第(3)中情況,後手B一定可以獲勝,B可以一步獲勝,亦可以製造
對稱局勢; 處於對稱局勢的先手一定失敗
(3)A Funny Game POJ - 2484
尋找對稱局勢;
本題中當n == 1|| n
2時,先手A可以一次全部取出;
當n==3時,先手A無論是拿一個還是拿兩個,後手B都可以在下一次取得勝利;
當n>=4時,先手A第一步之後,後手B可以落子形成對稱局勢。
(4)Plate Game CodeForces - 197A
判斷長方形是否可以放下一個盤子,當且僅當放不下盤子,先手A會輸;
如果可以放下n個盤子:
n ==1||n ==2時,A可以直接贏;
n>=3時,A合理的放置棋子,可以讓後手B面臨對稱局勢
率先面臨對稱局勢的一定會輸

6,組合博弈
(1)A Simple Game HDU - 1851
M堆石子,每堆最多取Li個,問後手獲勝的情況;
每一堆滿足巴士博弈,則通過這個計算出每一堆的sg值,0或者1,0表示該堆後手獲勝,1表示該堆先手獲勝;
M堆滿足nim(尼姆)博弈,計算sg值得異或,若ans==0,說明對於單堆來說,先手獲勝的局勢和後手獲勝的局勢都爲偶數,則後手可以形成對稱局勢;

反思:一開始只是取考慮先手獲勝的有幾局,如果是偶數,則對;否則錯;
這是錯誤的,sg值纔是每一組博弈的標誌。
7,二進制裏面的找規律的題
(1) Stone Game II+hdu 4388 二進制找規律
k<n;
如果 n^k<n;那麼k<n;
如果n的二進制數101;
那麼k只能是001,或者100;
就是將數字拆分之後1的個數減去n就是可以有幾局這樣的遊戲,

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