zoukankan      html  css  js  c++  java
  • poj 2506 Tiling 递推

    题目链接:

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

    题目描述:

      有2*1和2*2两种瓷片,问铺成2*n的图形有多少种方法?

    解题思路:

      利用递推思想,2*n可以由2*(n-1)的状态加上一块竖放2*1的瓷片转移得来,也可以由2*(n-2)的状态加上一块2*2的瓷片或者加上两块横放的2*1的瓷片转移得来。

    可得出递推公式:dp[n] = dp[n-1] + dp[n-2]*2;

    ac秘诀:

      (1):从输出样例可以看出要用大数来表示,大概需要90位左右。

      (2):2*0不是零种方法吗?经过无数次wa,证明是一,竟然是一!!!!!!!,也是醉了,苦苦思索了良久··········。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <iostream>
     5 using namespace std;
     6 #define maxn 90
     7 int dp[251][maxn], a[maxn];
     8 
     9 int main ()
    10 {
    11     int n, i, j;
    12     memset (dp, 0, sizeof(dp));
    13     dp[0][0] = 1;
    14     dp[1][0] = 1;
    15     dp[2][0] = 3;
    16     for (i=3; i<251; i++)//打标,储存所有的结果
    17     {
    18         int yu = 0;
    19         for (j=0; j<maxn; j++)//大数运算
    20         {
    21             int s = dp[i-2][j]*2 + yu + dp[i-1][j];
    22             dp[i][j] = s % 10;
    23             yu = s / 10;
    24         }
    25     }
    26     while ( scanf ("%d", &n) != EOF)
    27     {
    28         i = maxn - 1;
    29         while (dp[n][i] == 0)//除去前导零
    30             i--;
    31         for (; i >=0; i--)
    32             printf ("%d", dp[n][i]);
    33         printf ("
    ");
    34     }
    35     return 0;
    36 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    ajax的优缺点
    Service层事务不能回滚的解决方式
    java---springMVC与strutsMVC的区别
    java----监听器的作用
    ActionContextCleanUp
    Struts2请求处理流程及源码分析
    Struts2的拦截器是如何使用AOP工作的
    SSH三大框架的知识题
    java--Struts中请求的过程
    java----Servlet的生命周期
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4172204.html
Copyright © 2011-2022 走看看