這兩天認識了幾個組合遊戲的基礎模型,希望自己能更新下去。。
有兩個盒子,乙個裝有 m 顆糖,乙個裝有 n 顆糖,表示為 (m, n) .
每次清空乙個盒子,將另乙個盒子裡的糖轉移一些過來,並保證兩個盒子至少各有一顆糖。
最後進行轉移糖者勝,無法轉移糖者敗。
m, n 都為奇數,先手敗;m, n 至少乙個為偶數,先手勝。
顯然,初始狀態為(1, 1),先手必敗;
故對於任意 (m, n) 結論成立。
有乙個 m * n 的棋盤,棋盤的每乙個格仔用(x, y)表示,最左下角是(1, 1),最右上角是(m, n) ;
每次可以拿走乙個方格,並拿走該方格右邊與上邊的所有方格。
誰拿到(1, 1)誰敗。
當 m = n = 1,先手敗;除此之外,先手均有必勝策略(先手勝)。
反證法:
假設後手能取得勝利,那麼先手可以第一步拿走(m, n),若後續回合內後手通過拿走(x, y)達到了必勝狀態,先手均可以第一步就拿走(x, y)來達到必勝狀態。
故不存在後手必勝狀態。
由於無法給出構造性證明,所以只能證明先手必勝,而不能給出廣義的必勝策略。
桌上有 n 個數字:1~n。
兩人輪流在選擇乙個桌上的數 x ,然後將 x 與 x 的約數都拿走。
拿去最後乙個數的人勝出(無法選擇數字的人失敗)。
先手有必勝策略。(先手勝)
這個遊戲是 chomp! 的思想的應用。
假設後手能取得勝利,那麼先手可以第一步拿走 1,若後續回合內後手通過拿走 x 達到了必勝狀態,先手均可以第一步就拿走 x 來達到必勝狀態。
n 個物品堆成一堆。
兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取 m 個。
最後取光者得勝。(無法取者敗)
如果 n%(
m+1)
≠0,則先手必勝。
有乙個遊戲,在乙個n*m的矩陣中起始位置是(1, m),走到終止位置(n, 1);遊戲規則是只能向左,下,左下方向移動一步,先走到終點的為獲勝者。(hdu 2147,總共有 n + m 的距離要移動,一次最多移動 2 的距離,故判斷 (n + m)%2 是否為 0 即可)。
bash博弈變形1——減法博弈:
兩個人輪流報數,每次至少報乙個,最多報十個,誰能報到100者勝。(先手必勝,第一次報1,類似:hdu 2149)
有乙個由n個石子組成的石子堆,兩名玩家輪流從中拿走石子,每次拿走石子的個數只能是集合s中的數。拿走最後一枚石子的玩家獲勝。(狀態轉移即可)
bash博弈變形2:初始狀態下有石子n個,除最後一次外其他每次取物品個數必須在[p,q]之間,最後一次取硬幣的人輸。(hdu 2897)
這題狀態稍微複雜一些,並且勝負條件與之前相反,一般bash博弈裡每次取個數可以看作在[1,m]之間,勝負手判斷為 n%
(1+m
) ,因此我們可以猜想每次取[p,q]的勝負手判斷為 n%
(p+q
) ,通過驗證猜想我們可以發現如下策略:
//hdu 2897
#include
using
namespace
std;
int main()
return
0;}
有兩堆石子,一堆有 m 個,另一堆有 n 個。
雙方輪流取走一些石子,合法的取法有如下兩種:
1. 在一堆石子中取走任意多顆;
2. 在兩堆石子中取走相同多的任意顆.
取走最後一顆石子的人為贏家。
(1,2)
與 (2,1)
視為同一狀態,
第 k 個必敗狀態是 (\lfloor\frac*k \rfloor+k,\lfloor\frac*k \rfloor)
。
//hdu 1527 模板題
#include
using
namespace
std;
int main()
return
0;}
還是打表吧。。
const
int n = 50 ;
bool win[100][100] ;
void init() }}
for ( int i = 1 ; i <= n ; i++ )
for ( int j = i ; j <= n ; j++ )
}
有一堆個數為 n >= 2 的石子。
雙方輪流取石子,滿足以下條件:
1. 先手不能在第一次把所有的石子取完;
2. 之後每次可以取的石子數介於 1 到對手剛取的石子數的 2 倍之間(包含 1 和對手剛取的石子數的 2 倍)。
取走最後乙個石子的人為贏家。
如果 n 是斐波那契數,則後手勝;反之,先手勝。
\\hdu 2516 模板題
#include
using
namespace
std;
const
string win[2] = ;
long
long fib[100] ;
int init()
return
100 ;
}int main()
}cout
<< win[ok] << endl ;
}return
0;}
zeckendorf定理:任何正整數可以表示為若干個不連續的 fibonacci 數之和。先手必須從 <= n / 3 的數量開始取(例如第一次取的數量 > n/3,那麼後手可以直接取完所有剩下石子)
於是。。。太繞了!
還是請看acdream大神的吧。。
有三堆各若干個物品,兩個人輪流從某一堆取任意多的
物品,規定每次至少取乙個,多者不限,最後取光者得勝。
介紹這個遊戲的太多了。。偷個懶
具體解法就是異或異或!
組合遊戲(博弈)
昨天看大白書翻到了組合遊戲這章,看著發覺原來是博弈論的內容,於是便看下去了。真是不看不知道,一看才知道自己的水平有多弱,不過好在還是集中精神地看了大部分。從nim遊戲 n堆石子,每人每次可以從任意一堆中取至少1個 至多整堆的石子,不能取者為輸 開始講起,引入必勝態 必敗態的概念 1.乙個狀態是必敗狀...
組合遊戲(博弈)
昨天看大白書翻到了組合遊戲這章,看著發覺原來是博弈論的內容,於是便看下去了。真是不看不知道,一看才知道自己的水平有多弱,不過好在還是集中精神地看了大部分。從nim遊戲 n堆石子,每人每次可以從任意一堆中取至少1個 至多整堆的石子,不能取者為輸 開始講起,引入必勝態 必敗態的概念 1.乙個狀態是必敗狀...
博弈 ICE公平組合遊戲(簡單整理結論)
1.由兩名玩家組成。2.遊戲的狀態為有限的。3.兩人輪流走,當有一玩家不可繼續時遊戲結束。1.問題 一堆n個物品,兩人輪流取 1 m個 取光者勝。2.同餘定理 n k m 1 r,先手取走r個,無論後手取走多少個,只要先手取的數目和為 m 1 則先手必贏。分析 1 n m時,先手必贏。2 n m 1...