HDU1290 重建希望小学【递推+打表】

重建希望小学

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10010 Accepted Submission(s): 6636

Problem Description
下面是部分受灾学校伤亡情况

为什么会有这么多的学校伤亡惨重?也许有很多值得我们调查的东西。但对于我们来说,当前最紧迫的任务是重建学校,以便让幸存的学生早日走进课堂。
这不,一所由社会各界捐款修建的希望小学马上就要竣工了!学校教室的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,如果要为该教室铺设地砖,请问有几种铺设方式呢?

Input
输入数据首先包含一个正整数C,表示包含C组测试用例,然后是C行数据,每行包含一个正整数n(1<=n<=30),表示教室的长度。

Output
对于每组测试数据,请输出铺设地砖的方案数目,每个输出占一行。

Sample Input
2
2
3

Sample Output
3
5

Author
lcy

Source
2008-06-18《 ACM程序设计》期末考试——四川加油!中国加油!

问题链接HDU1290 重建希望小学
问题简述:(略)
问题分析
    组合数学的铺砖问题,关键是找出数学递推式。教室长度为n,宽度为3,考虑以下情形:
n=1,只能用1×1的3块砖来铺,铺砖方式是1种,f(1)=1;
n=2,全用1×1的砖来铺,或使用1块2×2的砖加2块(有2种摆放方式),f(2)=3;
n=3,在n=1的基础上,有2种摆放方式(不能全用全用1×1的砖来铺,考虑重复计算),在n=2的基础上只有1种摆放方式(全用1×1的砖来铺),f(3)=f(1)*2+f(2);
得f(n)=f(n-1)*2+f(n-1),这也是一般式。
在这里插入图片描述

    打表是必要的,可以加快程序计算速度。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* HDU1290 悼念512汶川大地震遇难同胞——重建希望小学 */

#include <bits/stdc++.h>

using namespace std;

const int N = 30;
int f[N + 1];

int main()
{
    f[0] = 0;
    f[1] = 1;
    f[2] = 3;
    for(int i = 3; i <= N; i++)
        f[i] = f[i - 2] * 2 + f[i - 1];

    int c, n;
    scanf("%d", &c);
    while(c--) {
        scanf("%d", &n);
        printf("%d\n", f[n]);
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值