题目内容: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]);
}
}