分治演算法 骨牌鋪方格

2022-09-15 08:42:14 字數 1209 閱讀 1051

time limit: 1000 ms memory limit: 32768 kib

problem description

在2×n的乙個長方形方格中,用乙個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數. 例如n=3時,為2× 3方格,骨牌的鋪放方案有三種,如下圖:

輸入資料由多行組成,每行包含乙個整數n,表示該測試例項的長方形方格的規格是2×n (0< n<=50)。

output

對於每個測試例項,請輸出鋪放方案的總數,每個例項的輸出佔一行。

sample input

1

32

sample output

132

演算法思路:

分治演算法核心就是縮小問題規模,一般有兩種縮小思路:二分法/遞減法,顯然這個問題採用"遞減法"比較好。

推算如上圖,現在假設需要計算第n個,即把n-1時再新增"乙個豎著的情況"(因為第n-1個我們把各種情況計算出來了,所以無需操心);但是我們缺少橫著的情況,那麼再往前推n-2個,再新增乙個"橫著的情況"。

因此得到遞推演算法 func(n)=func(n-1)+func(n-2)。

至於放在左右問題,因為之前n-1與n-2滿足所有情況,左右無關緊要,算作一種(對稱)。

源**:

1

//演算法.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。2//

34 #include "

pch.h

"5 #include 6 #include 7 #include 8 #include 9

using

namespace

std;

1011

12int

main()

24 printf("

%lld\n

", num[n]);25}

26 }

骨牌鋪方格 分治演算法

在2 n的乙個長方形方格中,用乙個1 2的骨牌鋪滿方格,輸入n 輸出鋪放方案的總數。例如n 3時,為2 3方格,骨牌的鋪放方案有三種,如下圖 輸入包含乙個整數n,表示該測試例項的長方形方格的規格是2 n 0sample input 3sample output 3f 0 0,沒有地方擺骨牌,所以為0...

骨牌鋪方格

time limit 1 sec memory limit 128 mb submit 43 solved 12 submit status web board 在2 n的乙個長方形方格中,用乙個1 2的骨牌鋪滿方格,輸入n 輸出鋪放方案的總數.例如n 3時,為2 3方格,骨牌的鋪放方案有三種,如下...

骨牌鋪方格

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