• poj2506 Tiling


    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

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 string Add(string str1, string str2)//大整数加法(两个正整数)
     5 {
     6     string str;
     7     int len1 = str1.length();
     8     int len2 = str2.length();
     9     if (len1 < len2)    //前面补0,使两个字符串长度相同  
    10     {
    11         for (int i = 1; i <= len2 - len1; i++)
    12             str1 = "0" + str1;
    13     }
    14     else
    15     {
    16         for (int i = 1; i <= len1 - len2; i++)
    17             str2 = "0" + str2;
    18     }
    19     len1 = str1.length();
    20     int cf = 0;//进位
    21     int temp;//当前位的值
    22     for (int i = len1 - 1; i >= 0; i--)
    23     {
    24         temp = str1[i] - '0' + str2[i] - '0' + cf;
    25         cf = temp / 10;
    26         temp %= 10;
    27         str = char(temp + '0') + str;
    28     }
    29     if (cf != 0)  str = char(cf + '0') + str;
    30     return str;
    31 }
    32 int main()
    33 {
    34     string num[251] = { "1","1","3" };
    35     for (int i = 3; i <= 250; i++)
    36     {
    37         num[i] = Add(num[i - 1], Add(num[i - 2], num[i-2]));
    38     }
    39     int temp;
    40     while (cin >> temp) {
    41         cout << num[temp] << endl;
    42     }
    43     return 0;
    44 }
    作  者: Angel_Q 出  处:http://www.cnblogs.com/DA799422035/ 关于作者:如有问题或建议,请多多赐教! 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 特此声明:所有评论都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
  • 相关阅读:
    Golang遍历空数组实现指定次数的循环
    关于“k8s 服务如何暴露UDP动态端口”的问题的解决
    分析fastcache和freecache(一)
    victoriaMetrics中的一些Sao操作
    victoriaMetrics无法获取抓取target的问题
    MySQL索引分类及相关概念辨析
    面试官:请用SQL模拟一个死锁
    gomicro使用Consul做服务发现的方法和原理
    gomicro集成链路跟踪的方法和中间件原理
    sqlx操作MySQL实战及其ORM原理
  • 原文地址:https://www.cnblogs.com/DA799422035/p/8995189.html
Copyright © 2020-2023  润新知