从这篇的标题可以看出……个寂寞,第一眼看到这个标题,大部分人绝对是一脸蒙的。
回归正题。
有人说,dp太难了,说我怎么一上来就写dp的题目(其实是自己觉得难),所以今天就降一个level,讲道递推的题。
题目如下:
【题目描述】
题目名:PKU2506Tiling
【描述】
对于一个2行 N N N列的走道。现在用12,22的砖去铺满。问有多少种不同的方式。
下图是一个2行17列的走道的某种铺法。
【输入】
整个测试有多组数据,请做到文件底结束。每行给出一个数字 N , 0 ≤ n ≤ 250 N,0 \le n \le 250 N,0≤n≤250
【输出】
如题
【样例输入】
2
8
12
100
200
【样例输出】
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
原题链接:原题链接
【算法分析】
其实这题用dp、递推还是递归都行,为了使题目简单理解点,我就用递推吧。
【数据存储】
因为有多组数据,又要求我们做到文件底结束,所以要用while循环:
int n;
while(cin>>n){
……………………
}
【数组含义】
数组含义嘛……其实就是指此时的面积用12,22方砖去铺满有几种方式。
【递推公式】
自己枚举几个就出来了,这里直接放出来:
f[i]=f[i-2]*2+f[i-1];
这些都搞懂后,代码自然就出来了。
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#define maxn 255
#define ull unsigned long long
using namespace std;
int n