墙壁涂色

题目不再赘述,

设 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]);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41921315/article/details/88084845