Time Limit: 10 second
Memory Limit: 2 MB
问题描述
有1*n的一个长方形,用一个1*1、1*2、1*3的骨牌铺满方格。例如n=3时为1*3的方格。此时用1*1、1*2、1*3的骨牌铺满方格,共有四种铺法。
Input
输入整数n。
Output
输出方法数
Sample Input
3
Sample Output
4
【题解】
假设我们现在要铺第4格,我们可以在铺满第一格的时候加上一块1*3的骨牌,也可以在铺满前两格的时候铺上一块1*2的骨牌,也可以在铺满前3格的时候铺上一块1*1的骨牌。
而铺满一块,两块,3块的方法,很容易就能得到。
由此可以得到一个递推式,即a[i]=a[i-1] + a[i-2] +a[i-3];
【代码】
#include <cstdio> #include <cstring> int n,a[100000]; void input_data() { a[1] = 1; a[2] = 2; a[3] = a[1] + a[2] + 1; a[4] = a[1] + a[2] + a[3]; //前面几种情况直接写出来 scanf("%d",&n); } void output_ans() { if (n <=4 ) //如果是小于4的情况直接输出 否则就递推 直到得到答案为止。 printf("%d",a[n]); else { for (int i = 5;i<=n;i++) for (int j = i-3;j <=i-1;j++) a[i] += a[j]; printf("%d",a[n]); } } int main() { input_data(); output_ans(); return 0; }