http://poj.org/problem?id=2506

题目大意:用多少种方法可以用2*1或2*2瓦片来铺一个2*n的矩形?

这是一个2*17长方形的样品。

输入是一行行的序列,每一行包含一个整数0 <= n <= 250。对于每一行输入,在单独的行中输出一个整数,给出一个2 * n矩形的可能摆放方式数。

也就是说给一个2*n的棋盘,用三种方块(2*2,1*2,2*1)将其铺满,求有多少种可能性,通过给出的案例可以发现,输出的结果很大long long类型也存不下,所以要运用大整数的加法。作图可以发现递归方程式,对2 * 1,2 * 2,2 * 3来说 2 * 1有1种;2 * 2有3种;2 * 3 可以在2 * 2 的基础上加一个2 * 1竖着放的瓦片,在 2 * 1 的基础上加一个2 * 2的瓦片,也可以加两个2 * 1横着放的瓦片(竖着放与在 2 * 2的基础上重复)。num[3] = num[2]+ 2 * num[1]

算法思想:递归求解,这里采用一次性计算的迭代法提高算法的效率。我们可以发现递归的方程式:

1)num[i] = num[i - 1]+ 2 * num[i - 2];  i>2

2)num[0]  =  1 ;  i=0

3)num[1]  =  1 ;  i=1

4)num[2]  =  3 ;  i=2

 #include <iostream>
#include <string>
using namespace std;
string Add(string str1, string str2)//大整数加法(两个正整数)
{
string str;
int len1 = str1.length();
int len2 = str2.length();
if (len1 < len2) //前面补0,使两个字符串长度相同
{
for (int i = ; i <= len2 - len1; i++)
str1 = "" + str1;
}
else
{
for (int i = ; i <= len1 - len2; i++)
str2 = "" + str2;
}
len1 = str1.length();
int cf = ;//进位
int temp;//当前位的值
for (int i = len1 - ; i >= ; i--)
{
temp = str1[i] - '' + str2[i] - '' + cf;
cf = temp / ;
temp %= ;
str = char(temp + '') + str;
}
if (cf != ) str = char(cf + '') + str;
return str;
}
int main()
{
string num[] = { "","","" };
for (int i = ; i <= ; i++)
{
num[i] = Add(num[i - ], Add(num[i - ], num[i-]));
}
int temp;
while (cin >> temp) {
cout << num[temp] << endl;
}
return ;
}

poj2506 Tiling的更多相关文章

  1. POJ2506——Tiling

    Tiling Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a samp ...

  2. POJ2506:Tiling(递推+大数斐波那契)

    http://poj.org/problem?id=2506 #include <iostream> #include <stdio.h> #include <strin ...

  3. Texture tiling and swizzling

    Texture tiling and swizzling 原帖地址:http://fgiesen.wordpress.com If you’re working with images in your ...

  4. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...

  5. POJ3420Quad Tiling(矩阵快速幂)

    Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3740 Accepted: 1684 Descripti ...

  6. Tri Tiling[HDU1143]

    Tri Tiling Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. Tiling 分类: POJ 2015-06-17 15:15 8人阅读 评论(0) 收藏

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8091   Accepted: 3918 Descriptio ...

  8. Tiling Up Blocks_DP

    Description Michael The Kid receives an interesting game set from his grandparent as his birthday gi ...

  9. I - Tri Tiling

      Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status #in ...

随机推荐

  1. /^\s+|\s+$/g 技术 内容

    alert(" aa dd ".replace(/^\s+|\s+$/g,'')+"方式的"); //正则表达式解释:分成两部分,^\s+ 以空格开头,\s+$ ...

  2. echarts 使用配置模式(含事件)

    <!-- 引入echarts UMD 环境--> <script src="js/echarts/build/dist/echarts.js"></s ...

  3. 2018.08.09 bzoj4719: [Noip2016]天天爱跑步(树链剖分)

    传送门 话说开始上文化课之后写题时间好少啊. 这道题将一个人的跑步路线拆成s->lca,lca->t,然后对于第一段上坡路径要经过的点,当前这个人能对它产生贡献当且仅当dep[s]-dep ...

  4. 2018.07.08 NOIP模拟 ABCD(背包)

    ABCD 题目背景 SOURCE:NOIP2016-AHSDFZ T2 题目描述 有 4 个长度为 N 的数组 a,b,c,d .现在需要你选择 N 个数构成数组e ,数组e 满足 a[i]≤e[i] ...

  5. 记录一次shell里局部变量的问题

    一:起因是这样的,自己今天面试被问到怎么读取某文件夹下所有的文件的每一行的数值的总和:其中文件中数值在每一行里的格式为num|,如33|,因此我第一想到的是通过cut -d\| f1 file来获取每 ...

  6. 【redis】linux上的安装与配置(详细图解)

    转载自:https://blog.csdn.net/yjqyyjw/article/details/73293455:经过个人测试也适用于当前最新稳定的3.x的版本,顺便填了几个坑. 1.下载 htt ...

  7. shell 脚本 抽取指定数量的随机学生

    #!/bin/bash # #!/bin/bash # read -p '输入数' c #指定抽取的学生人数 jw=('王浩' '谢云生' '黄科杨' '何星宇' '张宸兵' '邓培林' '刘桃' ' ...

  8. Android-AndroidStudio莫名其妙的错误-finished with non-zero exit value 1

    上一篇博客,Android-AndroidStudio莫名其妙的错误-finished with non-zero exit value 1,解决了由于 string.xml 字符导致的: 而这篇博客 ...

  9. Python学习-34.Python中os模块的一些方法(二)

    stat方法: 用于获取文件信息,例如创建时间.文件大小等. import os filestate=os.stat("e:/temp/test.txt") print(files ...

  10. Dapper 嵌套对象查询

    我有这样一个一对一关系的表结构:User->UserInfo User: /// <summary> /// 用户 /// </summary> [Serializabl ...