Bootstrap

洛谷题解(Java) P1990 覆盖墙壁

题目内容:https://www.luogu.com.cn/problem/P1990

主要算法:递推(自顶向下(从目标问题分解到基础条件))

实现思路:

( f(n)表示实现铺满第n列的总方案数        k(n)表示在第n列铺一个砖头的总方案数 )

1、考虑从f(n-1)和f(n-2)递推至f(n)

2、考虑从k(n-1)递推至f(n)

3、递推到k(n)

Java代码:


import java.io.*;

public class P1990 {
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    public static void main(String[] args)throws IOException {
        in.nextToken();
        int n = (int)in.nval;
        //递推公式
        int[] f = new int[n+1];     //f[n]表示覆盖掉第n列所有砖头的方法数
        int[] k = new int[n+1];     //k[n]表示覆盖掉第n列一个砖头的方法数
        //初始化
        f[0] = 0;
        f[1] = 1;
        f[2] = 2;
        k[0] = 0;
        k[1] = 0;
        k[2] = 1;
        for (int i = 3; i <= n; i++) {
            f[i] = (f[i-1]+f[i-2]+k[i-1]*2)%10000;  //后四位
            k[i] = (f[i-2]+k[i-1])%10000;
        }
        System.out.println(f[n]);
    }
}

;