hdu2516 取石子遊戲

2021-06-22 21:03:23 字數 592 閱讀 9163

題目大意:

桌子上有若干個石子,兩人輪流取。每次必須取走乙個,但不得超過前面的那個人取的數的2倍。拿到最後乙個石子的贏得遊戲。

首先,這是一道博弈題,毋庸置疑,找到必敗點,這道題就會有突破

1,2,3是不可否人的必敗點

對於4,先手先取走1個的話,後手就不能取3個,所以還剩下3個,3是必敗點,所以4就是必勝點

對於5,先手取3,4都會輸,取2也不行,取1的話,就剩下4個,4是必勝點,所以5是必敗點

對於6,先手取1,剩5,所以6是必勝點。。。。

以此類推,就會發現規律

必敗點總是這樣f(i)=f(i-1)+f(i-2)斐波那契數,

哈哈,就是這樣**出來了。。。。

**如下:

#includeusing namespace std;  

int main()

; for(int i = 3; i <= 45; i++)

fun[i] = fun[i-1] + fun[i-2];

while(cin >> n && n)

return 0;

}

hdu 2516 取石子遊戲

題目 hdu 2516 取石子遊戲 思路 fibonacci nim 列舉前幾項,發現2,3,5是必敗態,不能說明什麼。對於當前的狀態,第一次不能全部取完,其餘的每次取的時候,不能超過前者上一次的兩倍。對於當前狀態n,最多能取的是 ceil n 3 1 和 前一狀態取的的兩倍 兩者間的最小值。然後這...

hdu2516 取石子遊戲

思路 找規律。先寫個暴力程式,然後發現凡是斐波那契數,都是後手贏,否則先手贏。我也不知道為什麼。暴力程式在 中被注釋。include include include include include include include include include include include inc...

hdu 2516 取石子遊戲

problem description 1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,但不能全部取完.以後每次取的石子數不能超過上次取子數的2倍。取完者勝.先取者負輸出 second win 先取者勝輸出 first win input 輸入有多組.每組第1行是2 n 2 31.n 0退出...