【输入格式】
一个整数N(1<=n<=1000000),表示墙壁的长。
【输出格式】
输出覆盖方法的最后4位,如果不足4位就输出整个答案。
【数据规模】
Sample Input1
13
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u234
【题解】
是一道递推题.
这种题还有点不熟吧。
设
f[i][0]表示第i列,第一行有方格,第二行没方格,且前i-1列满方格;
f[i][1]表示第i列,第一行有方格,第二行也有方格,且前i-1列满方格;
f[i][2]表示第i+1列,第一行没方格,第二行有方格,且前i列满方格;
递推关系可以画一画
如下图
按照上面的递推公式,不难写出程序;
只取后4位的话,mod 10000就好;
【完整代码】
#include <cstdio>
const int MAXN = 1e6+100;
const int MOD = 10000;
int n;
int f[MAXN][3];
int main()
{
f[0][1] = 1;
f[1][0] = 0;f[1][1] = 1;f[1][2] = 1;
scanf("%d",&n);
for (int i = 2;i <= n;i++)
{
f[i][0] = (f[i-2][2] + f[i-2][1])%MOD;
f[i][1] = (f[i-2][1] + f[i-1][1] + f[i-1][0] + f[i-2][2])%MOD;
f[i][2] = (f[i-1][1] + f[i][0])%MOD;
}
printf("%d
",f[n][1]);
return 0;
}