鋪地磚(找遞推式 大數)

2021-09-03 05:13:59 字數 1377 閱讀 4622

時間限制: 1 sec  記憶體限制: 128 mb

題目描述

一天,晨晨的數學老師布置了一道題目,大意如下:用1×1和2×2的磁磚不重疊地鋪滿n×3的地板,共有多少種方案?

例如:n=1時:1×3的地板方法就乙個,直接由三個1×1的磁磚鋪滿。

n=2時:2×3的地板可以由下面3種方案鋪滿:

輸入第一行:乙個整數n(1≤n≤100)。

輸出輸出鋪滿n×3的地板的方案數。

複製樣例資料

3
樣例輸出

5
提示

對於20%的資料,1≤n≤15;

對於50%的資料,1≤n≤30;

對於100%的資料,1≤n≤100;

設寬為n的時候方案數為f[n];

根據這張圖可以發現,寬為2,長為3的有3種方法。由於長是固定為3的,那麼當寬大於2的時候,可以試著找

通過n-1,n-2的寬度來找,去掉n-1行,那麼就剩下最後一行,只能鋪1*1的磚3塊,所以為f[n-1];去掉n-2行,那麼還剩下兩行,也就只有上面三種方法,是3種嗎,看方法三,和去掉n-1行重複了,所以只有2種方法為2*f[n-2];

所以總共f[n]=f[n-1]+2*f[n-2];

由於資料太大,用大數做。

/**/

#include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll;

using namespace std;

int f[105][10005];

int n;

void solve(int a, int b, int c)

} int len = b[0];

while(a[len + 1]) len++;

for (int i = 1; i <= c[0]; i++)

} int cnt = c[0];

while(a[cnt + 1])else

} a[0] = max(cnt, len);

}int main()

for (int i = f[n][0]; i >= 1; i--) printf("%d", f[n][i]);

printf("\n");

return 0;

}/**/

C語言鋪地磚問題

鋪地磚 time limit 1000ms memory limit 65536k total submit 711 accepted 224 description 元旦過去了,新年大酬賓活動也已經告一段落了。陳蓋歷望著堆在倉庫的瓷磚,很無聊的他把這些瓷磚裁成很多1x1 1x2 1x3的小瓷磚,然...

矩陣覆蓋 鋪地磚問題

描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 target 1大矩形為2 1,只有一種擺放方法,return1 target 2 大矩形為2 2,有兩種擺放方法,return2 target n 分為兩步考...

鋪地磚 狀壓DP練習

有乙個n m n 5,m 1000 的棋盤,現在有1 2及2 1的小木塊無數個,要蓋滿整個棋盤,有多少種方式?答案只需要mod1,000,000,007即可。我也不知道這道題的 qaq n和m的範圍本應是相同的,但是題目給出的n的值很小,這就給我們提供了使用狀壓dp的思路。假設第一列已經鋪滿,則第二...