zoukankan      html  css  js  c++  java
  • hdu1992(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1992

    题意:用1*2和2*1的小长方形铺垫4*W的方格有多少种方法。

    分析:假如新加入1列,这列都竖着,肯定有a[i]种,假如最后加入的方块要横跨最右那条边界,没有横跨到倒数第二列,则有4*a[i-2];当同时横跨最右的两条边界,没有跨倒数第三条边界,则有2*a[i-3]种,当横跨同时最后三条时,没有跨倒数第四条边界时,模拟发现有3*a[i-4]种,即当同时横跨奇数t条边界时,则有2*a[i-t];t为偶数时有3*a[i=t];所以发现a[i]=a[i-1]+4*a[i-2]+2*a[i-3]+3*a[i-4]+......+a[i-i]*b(i为奇数b=2,为偶数b=3).

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <cstdlib>
    #include <vector>
    #include <set>
    #include <map>
    #define LL long long
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define N 10010
    using namespace std;
    LL a[1010];
    void init()
    {
        a[0]=1;a[1]=1;a[2]=5;a[3]=11;
        for(int i=4;i<=30;i++)
        {
            LL sum=a[i-1]+4*a[i-2];
            LL b=2;
            for(int j=i-3;j>=0;j--)
            {
                sum+=a[j]*b;
                if(b==2)b++;
                else b--;
            }
            a[i]=sum;
        }
    }
    int main()
    {
        int t,n,cas=1;
        init();
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            printf("%d %I64d
    ",cas++,a[n]);
        }
    }
    View Code
  • 相关阅读:
    超图 wpf地图控件加载地图
    MySql常用内容
    超图资料下载与环境安装
    超图SampleCode运行须知
    英语感叹词
    英语之妻子,老婆
    Pycharm设置
    yizhihx ubuntu config
    Ubuntu之网易云音乐无法启动
    linux之错误输出重定向
  • 原文地址:https://www.cnblogs.com/lienus/p/4151930.html
Copyright © 2011-2022 走看看