轉(zhuǎn)載請(qǐng)注明出處:http://www.klion.0fees.net/?p=29
Fibonacci Nim是如下一種游戲
一堆石子有n顆.兩人按如下規(guī)則輪流取一定的石子。
1.第一個(gè)取的至少取1顆,至多取n-1顆
2.每次取的石子數(shù)不能超過(guò)對(duì)手剛?cè)〉?倍,最后取完的算贏家。
現(xiàn)在我們需要算出對(duì)于某個(gè)n,是先手必勝,還是后手必勝。看到題目,基本也就想到一二了,肯定和Fibonacci數(shù)列有關(guān),確實(shí)。不過(guò)怎么個(gè)有關(guān)法呢?相信只要你動(dòng)手算幾個(gè)小數(shù),就會(huì)猜出來(lái)了,對(duì)于n = Fi先手一定必?cái)?否則先手必勝。好了,下面我們就來(lái)證明這個(gè)結(jié)論吧:
首先我們會(huì)用到如下三個(gè)性質(zhì):
I.若K >= N,則狀態(tài)(N,K)必勝(在這里我們用(N,K)表示還剩下N顆石子,最多能取K顆石子的一個(gè)狀態(tài))
II.若狀態(tài)(N,N-1)先手必?cái)?那么狀態(tài)(N,K)(K<N)必?cái) ?/p>
III.若狀態(tài)(N,K)(K<N)則最后一次取走的石子數(shù)不超過(guò)2*N/3
下面證明(Fi,K)(K<Fi)必?cái)?/p>
一.F1(=2),F2(=3)顯然成立.
二.若F1至Fi成立,則F(i+1)成立
設(shè)先手取K顆石子。
1).若K>=F(i-1),后手得到狀態(tài)(N-K,2*K)(N=F(i+1)),2*K>=2*F(i-1)>F(i-1)+F(i-2)=F(i)>N-K.所以后手必勝,也就是先手必?cái) ?/p>
2).若K <= F(i-1)
我們可知(F(i-1),K)必?cái)?假設(shè)得到的),所以后手可以使先手達(dá)到(F(i),X)(X < F(i))狀態(tài)
由性質(zhì)III可得X <= (2*F(i-1)/3)*2 = 4*F(i-1)/3 = F(i-1)+1/2*F(i-1) <= F(i-1)+F(i-2)=F(i),所以(F(i),X)必?cái) ?/p>
下面是n != F(i)
那么(N,N-1)先手必勝。這要使得后手處于<=n的最大的Fibonacci數(shù)就行,這樣就相當(dāng)于后手必輸,也就是先手必勝。