zoukankan      html  css  js  c++  java
  • 【9304】骨牌铺法

    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;
    }
    
  • 相关阅读:
    学习使人快乐9--eclipse常用快捷键总结
    5.20新一周
    Mybatis+Spring框架整合
    Mybatis3
    Mybatis2
    Mybatis1
    查找算法
    Spring3:spring的事务操作
    Spring2:
    Spring:
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632425.html
Copyright © 2011-2022 走看看