问题描述
有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?
例如,长度为4的地面一共有如下5种铺法:
4=1+1+1+1
4=2+1+1
4=1+2+1
4=1+1+2
4=2+2
编程用递归的方法求解上述问题。
输入格式
只有一个数N,代表地板的长度
输出格式
输出一个数,代表所有不同的瓷砖铺放方法的总数。
思路:首先看数据范围 n ≤10 很容易想到暴力搜索。题意就是给你一个数 让你求有多少种方法通过 只使用1 和 2来凑出 。可以抽象为一棵树树顶是n 。从 n开始往下走,每次都有两个分支一 个是减去1一个是减去2,走到底之后只有刚好减完了才算一种方法。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
const int N=0,mod=1e9+7;
int ans;
void dfs(int x)
{
if(x<0)return;
if(x==0)ans++;
dfs(x-1);
dfs(x-2);
}
void solve()
{
int n;
cin>>n;
dfs(n);
cout<<ans<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int T=1;
//cin>>T;
while(T--) {
solve();
}
return 0;
}
标签:int,long,蓝桥,瓷砖,铺放,dfs,长度
From: https://blog.csdn.net/shadow2kkkk/article/details/136710921