luogu 1990 覆蓋牆壁 狀壓dp

2021-07-10 11:10:17 字數 910 閱讀 9419

題目描述 description

你有乙個長為n寬為2的牆壁,給你兩種磚頭:乙個長2寬1,另乙個是l型覆蓋3個單元的磚頭。如下圖:

0  0

0  00

磚頭可以旋轉,兩種磚頭可以無限制提供。你的任務是計算用這兩種來覆蓋n*2的牆壁的覆蓋方法。例如乙個2*3的牆可以有5種覆蓋方法,如下:

012 002 011 001 011

012 112 022 011 001

注意可以使用兩種磚頭混合起來覆蓋,如2*4的牆可以這樣覆蓋:

0112

0012

給定n,要求計算2*n的牆壁的覆蓋方法。由於結果很大,所以只要求輸出最後4位。例如2*13的覆蓋方法為13465,只需輸出3465即可。如果答案少於4位,就直接輸出就可以,不用加0,如n=3,時輸出5。

輸入輸出格式 input/output

輸入格式:

乙個整數n(1<=n<=1000000),表示牆壁的長。

輸出格式:

輸出覆蓋方法的最後4位,如果不足4位就輸出整個答案。

輸入樣例 13

輸出樣例

3465

題目分析:dp[i][j]表示到第i列第i-1列狀態為j,第i列狀態為k時的方案數j和k是0-3,用二進位制表示四種狀態0表示上下都不放,1表示上放下不放,2表示上不放下放,3表示上下都放,然後列舉各種情況隨便搞一搞

#include int const max = 1000005;  

int const mod = 10000;

int dp[max][4][4];

void up(int &x, int y)

int main()

printf("%d\n", dp[n][3][3]);

} }

luogu p1990 覆蓋牆壁

傳送門 你有乙個長為n寬為2的牆壁,給你兩種磚頭 乙個長2寬1,另乙個是l型覆蓋3個單元的磚頭。如下圖 0 0 0 00磚頭可以旋轉,兩種磚頭可以無限制提供。你的任務是計算用這兩種來覆蓋n 2的牆壁的覆蓋方法。例如乙個2 3的牆可以有5種覆蓋方法,如下 012 002 011 001 011 012...

洛谷 1990 覆蓋牆壁 遞推

題目描述 你有乙個長為n寬為2的牆壁,給你兩種磚頭 乙個長2寬1,另乙個是l型覆蓋3個單元的磚頭。如下圖 0 00 00 磚頭可以旋轉,兩種磚頭可以無限制提供。你的任務是計算用這兩種來覆蓋n2的牆壁的覆蓋方法。例如乙個23的牆可以有5種覆蓋方法,如下 012 002 011 001 011 012 ...

洛谷 P1990 覆蓋牆壁

你有乙個長為n寬為2的牆壁,給你兩種磚頭 乙個長2寬1,另乙個是l型覆蓋3個單元的磚頭。如下圖 0 0 0 00磚頭可以旋轉,兩種磚頭可以無限制提供。你的任務是計算用這兩種來覆蓋n 2的牆壁的覆蓋方法。例如乙個2 3的牆可以有5種覆蓋方法,如下 012 002 011 001 011 012 112...