zoukankan      html  css  js  c++  java
  • poj2506(Tiling)

    题目大意:

    给你一个2*N的矩形。 让你用2*1或者2*2的小矩形去拼成2*N的矩形。问你有多少种拼法。

    解题思路:

    类似于简单的骨牌铺路。

    N长度的矩形,可以由  前(N-1)种+最后一个放竖着的2*1小矩形  和  前(N-2)种+最后两位横着放两位2*1的小矩形  和  前(N-2)种+最后两位放一个两位2*2的小矩形。

    所以递推公式  f(n)=f(n-1)+f(n-2)+f(n-2).

    涉及到大数相加。  (需要整理大数相加,大数相减,大数相乘,大数相除的模板!)

    代码:

     1 #include<cstdio>
     2 #include<math.h>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 int a[255][1000];
     8 void inint()
     9 {
    10     int i,j,k;
    11     a[0][999]=1;
    12     a[1][999]=1;
    13     a[2][999]=3;
    14     for(i=3;i<255;i++)
    15         for(j=999;j>=0;j--)
    16         {
    17             a[i][j]+=a[i-1][j]+a[i-2][j]+a[i-2][j];
    18             if (a[i][j]>=10)
    19             {
    20                 int t=a[i][j];
    21                 a[i][j]=t%10;
    22                 a[i][j-1]+=t/10;
    23             }
    24         }
    25 }
    26 int main()
    27 {
    28     memset(a,0,sizeof(a));
    29     inint();
    30     int n;
    31     while(scanf("%d",&n)!=EOF)
    32     {
    33        int i;
    34        int ce=0;
    35        for(i=0;i<1000;i++)
    36        {
    37            if (!ce&&!a[n][i])
    38                continue;
    39             ce++;
    40             printf("%d",a[n][i]);
    41        }
    42        printf("
    ");
    43     }
    44     return 0;
    45 }
    View Code
    屌丝终有逆袭日,*******。
  • 相关阅读:
    (22)进程和线程区别
    (21)回调函数
    (20)gevent协程
    (18)ProcessPoolExecutor进程池
    (19)ThreadPoolExecutor线程池
    (17)线程队列---queue LifoQueue PriorityQueue
    (16)线程---定时器Timer
    (15)线程---Condition条件
    (14)线程- Event事件和守护线程Daemon
    IDEA快速搭建WEB项目【记录篇】
  • 原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3750218.html
Copyright © 2011-2022 走看看