【 u234】覆盖墙壁

来源:互联网 发布:报价表格软件 编辑:程序博客网 时间:2024/04/28 04:53

这里写图片描述

【输入格式】

一个整数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\n",f[n][1]);    return 0;}
0 0