zoukankan      html  css  js  c++  java
  • hdu 2501 Tiling_easy version 递推

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2501

    题目分析:已知有2*1,2*2,两种型号的瓷砖,要求铺满2*n的格子有多少种方法。可以考虑最左边一列的铺法,竖着铺的话,右边为f(n-1),只有一种铺法;横着铺的话,可以用一块2*2或者两块2*1的横铺, 右边为f(n-2), 有两种。 故递推公式为:f(n) = f(n-1) + 2*f(n-2)

    /*Tiling_easy version
    
    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5666    Accepted Submission(s): 4461
    
    
    Problem Description
    有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。
     
    
    Input
    输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列。
     
    
    Output
    输出一共有多少种铺设的方法,每组数据的输出占一行。
     
    
    Sample Input
    3
    2
    8
    12
     
    
    Sample Output
    3
    171
    2731
     
    
    Source
    《ACM程序设计》短学期考试_软件工程及其他专业
    */
    //f(n) = f(n-1) + 2*f(n-2)
    #include <cstdio>
    const int maxn = 30 + 10;
    int a[maxn];
    int main()
    {
        int n, t;
        a[1] = 1; a[2] = 3;
         for(int i = 3; i < maxn; i++){
             a[i] = a[i-1]+2*a[i-2];
         }
         while(~scanf("%d", &t)){
             while(t--){
                 scanf("%d", &n);
                 printf("%d
    ", a[n]);
             }
         }
         return 0;
    }
  • 相关阅读:
    AttributeUsage属性
    LINQ基本子句
    js 变动首页参与人数
    C#控件的闪烁问题解决方法总结
    AttributeUsage
    MVC3 js+flash图片滚动
    通过写后台权限领悟到的东西
    删除同辈元素并添加指定元素的类
    JS产生两个数之间的随机数
    Web Service 学习笔记
  • 原文地址:https://www.cnblogs.com/ACFLOOD/p/4254561.html
Copyright © 2011-2022 走看看