時間限制: 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的思路。假設第一列已經鋪滿,則第二...