题目不再赘述,
设 f[n] 为n尺寸墙壁有多少种涂色方法。
f[1]=3: (红), (黄) ,(蓝)
f[2]=6: (红,黄),(红,蓝),(黄,红),(黄,蓝),(蓝,红),(蓝,黄)
f[3]=6: (红,黄,蓝),(红,蓝,黄),(黄,红,蓝),(黄,蓝,红),(蓝,红,黄),(蓝,黄,红)
找规律了:
f[4]: (红,黄,蓝)+(黄),(红,蓝,黄)+(蓝),(黄,红,蓝)+(红),(黄,蓝,红)+(蓝),(蓝,红,黄)+(红),(蓝,黄,红)+(黄),-->z这是 f[3]个
(红,黄)+(红,黄/蓝),(红,蓝)+(红,黄/蓝),(黄,红)+(黄,红/蓝),(黄,蓝)+(黄,蓝/红)
(蓝,红)+(蓝,红/黄) ,(蓝,黄)+(蓝,黄/红)-->这是 f[2]*2个
递推下去你会发现, 当第1项和第n-1项不同色时。第n项只有一种颜色可以取,即f[n]=f[n-1]
当第1项和第n-1项同色时。第n项有两种颜色可以取,同时因为第1块和第n-1块同色,所以f[n]=2*f[n-2]. 不难得到f[n] = f[n-1] + f[n-2]*2 (n>3)
代码如下:
package Texun_12;
import java.util.Scanner;
public class L13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] f=new int[n+5];
f[1]=3;
f[2]=6;
f[3]=6;
for(int i=4;i<=n;i++) {
f[i]=f[i-1]+f[i-2]*2;
}
System.out.println(f[n]);
}
}