小明的烦恼

小明的烦恼

时间限制: 1 Sec 内存限制: 32 MB


题目描述

小明最近新买了一个房间,为了给它做装修,想要给它铺上地砖。然而现有的地砖只有两种规格分别为1米*1米、2米*2米,由于小明买的房间有点小,宽度只有3米,长度为N米。当然这样一个房间也足够他自己一个人住了。那么如果要给这个房间铺设地砖,且只用以上这两种规格的地砖,请问有几种铺设方案。

输入

输入的第一行是一个正整数C,表示有C组测试数据。接下来C行,每行输入一个正整数n(1<=n<=30),表示房间的长度。

输出

对于每组输入,请输出铺设地砖的方案数目。

样例输入

2
2
3

样例输出

3
5

题意概括

一共有两种地砖,1*1的和2*2的,知道墙宽是三米,问,当长度为n米的时候,铺盘地砖一共有多少种铺的方法。

解题思路

这个题我是使用的搜索,把所有符合的情况都搜索一遍,然后求和,但是这个题后来才知道是一个变形的斐波那契~~~

代码如下

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<algorithm>
using namespace std;

long long sum;
void dfs(int m,int num)
{
    if(m==0){
        sum+=(int)pow(2,num);
        return ;
    }
    dfs(m-1,num);
    if(m>1){
        dfs(m-2,num+1);
    }
}
int main ()
{
    int n,m,i,j;
    scanf("%d",&n);
    while(n--){
        scanf("%d",&m);
        sum=0;
        dfs(m,0);
        printf("%lld
",sum);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/lanaiwanqi/p/10445730.html