HDU2046 骨牌鋪方格 遞推 C語言

2022-08-30 02:21:07 字數 1024 閱讀 5088

題目:

知道應該用遞迴遞推來做,但是一直找不到規律

……拖了好久,終於決定今天做完。苦思無果搜題解,發現**只有幾行

…… 遞推遞迴果然神奇啊!!!

思路:f(1)=1,f(2)=2,f(3)=5

,當有n

個方格的時候,有兩種鋪法:

1)先鋪好

n-1個格,有

f(n-1)

個方法,再鋪第

n層的時候只有一種方法,所以總方法是1

*f(n-1);

2)先鋪好

n-2格,有

f(n-2)

個方法,再鋪後面兩層的時候只能兩個都橫著鋪(否則與第一種情況重複),所以也只有一種情況,總方法數是

1*f(n-2)

再沒有其他情況了。

推出f(n)=f(n-1)+f(n-2)

提交情況:2次

tle,

兩次wa

ac code:

view code

1

#include

<

stdio.h

>

2#include

<

stdlib.h

>

3int

main () ;

7for

(i =

3; i

<=

51; i++)

8a[i]

=a[i -1

] +a[i -2

];9while(~

scanf ("%d

", &n))

10printf (

"%i64d\n

", a[n]);

11//

system ("pause");

12return0;

13}

先開始寫了乙個子函式遞迴,於是超時了,改用陣列寫,

a[n]

開成了int

型,溢位了,於是wa了

……這種找規律的題還是要多多練習才行啊!

HDU2046骨牌鋪方格

description 在2 n的乙個長方形方格中,用乙個1 2的骨牌鋪滿方格,輸入n 輸出鋪放方案的總數.例如n 3時,為2 3方格,骨牌的鋪放方案有三種,如下圖 input 輸入資料由多行組成,每行包含乙個整數n,表示該測試例項的長方形方格的規格是2 n 0 output 對於每個測試例項,請輸...

HDU 2046 骨牌鋪方格

遞迴總體思路 對於 1張 1 2 的骨牌,它只有橫放 豎放2種情況 如果要豎放,前 n 1 張牌必須已經固定好,因而這種情況下,就是 f n 1 同理,如果要橫放,前 n 2 張牌必須已經固定好,這種情況下,就是 f n 2 把2種情況下的方案加起來,就是 n 張骨牌的放置方案總數 也可參見這個題解...

hdu2046 骨牌鋪方格

在2 n的乙個長方形方格中,用乙個1 2的骨牌鋪滿方格,輸入n 輸出鋪放方案的總數.例如n 3時,為2 3方格,骨牌的鋪放方案有三種,如下圖 輸入資料由多行組成,每行包含乙個整數n,表示該測試例項的長方形方格的規格是2 n 0對於每個測試例項,請輸出鋪放方案的總數,每個例項的輸出佔一行。1 3 2 ...