原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1031
思路:随便写写画画就知道,这就是个菲波拉契数列,因为对于2*N的方格,当前位置(也就是最右边),要么横着放两个,方案数就是2*(N-2)的方案数,或者竖着放一个,方案数就是2*(N-1)的方案数,数据又小,递推求解即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1e5 + 5;
int f[1005] = { 0,1,2 };
int main() {
int n;
scanf("%d", &n);
for (int i = 3; i <= n; i++) {
f[i] = (1LL * f[i - 1] + f[i - 2]) % MOD;
}
printf("%d\n", f[n]);
return 0;
}