zoukankan      html  css  js  c++  java
  • HDU 1143 Tri Tiling 递归问题

     

    将一个3*n的矩形用1*2的矩形填充,n为奇数时一定不能被填满,n*3%2==1

    接下来处理这个问题我们要从简单的情况开始考虑,所谓递归就是要能将问题的规模不断减小,通过小问题的解决最后将复杂问题解决。如果是3*2的情况仅有3种可能

     

    那么我们来考虑3*4的矩形是否一些就是有这两个3*2的矩形拼接在一起的多种组合,当然还包含一种特殊的情况即如下图所示的拼接方法

    把 4, 6, 8.... 看成一整块,就有下图两种情况(正着,倒着)

     

    那么我们可以将其排成的各种情况分成如下两大类

    由自身单独构成的矩形(即不可以分割)

    可以分割的情况,即2*f(n-2i)(此时2i>2)/3*f(n-2i)(此时2i==2)

    如图所示

     

    代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int till(int n)
     5 {
     6     int s,i;
     7     if(n!=2)
     8     {
     9         s=2;
    10     }
    11     else
    12         return 3;
    13     for(i=2;i<n;)
    14     {
    15         if(i==2)
    16             s=s+3*till(n-i);
    17         else
    18             s=s+2*till(n-i);
    19         i=i+2;
    20     }
    21     return s;
    22 }
    23 int main()
    24 {
    25     int n;
    26     while(cin>>n)
    27     {
    28         if(n==-1)
    29             break;
    30         if(n%2==1)
    31             cout<<0<<endl;
    32         else if(n==0)
    33             cout<<1<<endl;
    34         else
    35             cout<<till(n)<<endl;
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    CC_UNUSED_PARAM 宏含义的解释
    JAVA 字符串编码总结
    cocos-html5 Json 灵活 遍历方式 不同方式的缺陷,优点总结
    selenium--获取HTML源码断言和URL地址
    django -- 路由
    selenium--表格和复选框的定位
    selenium--加载浏览器配置
    django -- 视图
    django -- 母版继承
    selenium--浏览器窗口截图
  • 原文地址:https://www.cnblogs.com/fancy-itlife/p/4320685.html
Copyright © 2011-2022 走看看