一種斐波那契博弈 Fibonacci Nim

2022-02-28 19:04:47 字數 1316 閱讀 4250

事實上我也不知道這算是哪個型別的博弈

是在複習$noip$初賽的時候看到的乙個挺有趣的博弈

所以就寫出來分享一下

$upd \ on \ 2018.10.12$忽然發現這個其實就是$fibonacci nim$...

題目:有n張紙牌,a,b兩人輪流按照以下規則取牌。

規則一:a先取,但是不能在第一次將紙牌全部取完,而且至少要取一張;

規則二:每次所取紙牌張數必須大於或等於1,且小於等於對手剛取的紙牌張數的兩倍。取到最後一張牌者為勝者。

輸入紙牌的張數n,判斷a是否必勝,如果必勝,輸出」win」,否則輸出」lose」。

問題分析:當n較小時,可以歸納如下:

⑴2張牌時,先拿的人必輸;

⑵3張牌時,先拿的人必輸;

⑶我們先看5張牌的情況,假如我們把取5張牌分成兩個步驟:先取前面2張,再取後面3張,為什麼可以這樣分成兩個步驟?因為後取者有這個權力!先者只能取第一張,後者可以取到第二張,這樣,後者就必可以取到第5張牌,先者必輸。

同樣,如果是8張牌時,可以分為:先取前面3張,再取後面5張,後者勝,先者必輸。

結論:⑴如果牌的張數$n$是$fibonacci$數時,先取牌者必敗。 ⑵對所有非$fibonacci$數都是先取人必贏,反之,必敗。

下面給出一般性證明:

假設$n<=k$,且牌數為$fibonacci$數時,都是取牌者必輸。

那麼$n=k+1$時,因為$f(k+1)=f(k)+f(k-1)$,即要取完$f(k+1)$張牌,可以分成兩步:先取完$f(k-1)$張牌,再取完$f(k)$張牌。對於$f(k-1)$張牌,先取a者輸!意味著對於$f(k)$張牌,a還得必須先取,所以a輸。

那麼,牌數為非$fibonacci$數時,先取牌者有沒有必勝的策略呢?

引用乙個定理:當乙個數不是$fibonacci$數時,這個數必然等於若干個$fibonacci$數之和,並且這些$fibonacci$數在$fibonacci$數列中都不相鄰。

比如:$78=55+23=55+21+2$(其中55,21,2都是$fibonacci$數);

對於非$fibonacci$數$a0$,設f(n)是小於4a0$的最大$fibonacci$數。

$a0=f(n)+…+f(i)+f(j)$,其中$f(j)$是式中最小的$fibonacci$數,$f(i)$是第二小的$fibonacci$數。由於$f(i)$、$f(j)$在$fibonacci$數列中並不是相鄰的,所以$f(i)>2*f(j)$。所以先取者可以直接取走$f(j)$張牌,後取者無法一次取走$f(i)$張牌,$f(i)$是$fibonacci$數,由前面的分析,後取者必敗。

結論:對所有非$fibonacci$數都是先取人必贏,反之,必敗。

斐波那契博弈

斐波那契博弈 有一堆物品,兩人輪流取物品,先手最少取乙個,至多無上限,但不能把物品取完,之後每次取的物品數不能超過上一次取的物品數的二倍且至少為一件,取走最後一件物品的人獲勝。結論是 先手勝當且僅當n不是斐波那契數 n為物品總數 如hdu2516 include include include us...

斐波那契博弈?!

有一堆石子有n顆,雙方輪流取石子。先手第一次可以拿至少乙個但是不能拿完 接下來每次取的石子至少為1個,至多為上一次拿的兩倍 問先手是否有必勝策略 觀 da 察 biao 發現先手必敗當且僅當n為斐波那契數?考慮歸納證明 設n是斐波那契數,n a b,a和b為n的前兩個斐波那契數 設先手拿的石子數量為...

斐波那契博弈

規則 有n個石子,先手可以取 1,n 個石子,而後的人至多能取上乙個取石子數的兩倍,即 1,2 x 取完勝 結論 若n為斐波那契數,則先手必敗,否則必勝 證明 數學歸納法 記f i 為斐波那契數列 若n f 0 2,顯然先手必敗 設n f k 時,先手必敗 當n f k 1 時 f k 1 f k ...