package com.demo2;
import java.util.Scanner;
/*
* 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,
* 每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.
*
* 输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。
*/
public class HDU_oj2045 {
/*
* 一看就是递推找规律的题
直接考虑 n >= 4 的情况,以后的方式数可以这么分情况:
第 n - 1 项为第一项的颜色与否。
① n - 1 项与第一项颜色相同,那么则应该在 f [ n - 2 ] 后面直接加上第一项的颜色(因为 f [ n - 2 ] 不可能末项为第一项的颜色),
那么第 n - 1 项则有两种选择, 第n项只有一种选择了。故,此方案的数量应该为 f [ n - 2 ] *2
② n - 1 项与第一项颜色不同,那么此方案的数量就为 f [ n - 1 ] 的数量,
最后一项不能为第一项的颜色,不能为 n - 1 项的颜色,则第 n 项只有一种可能。方案数为 f [ n - 1 ]
所以,递推公式就出来了: f [ n ] = f [ n - 1 ] + f [ n - 2 ] * 2
*/
public static void main(String[] args) {
Scanner sn = new Scanner(System.in);
while(sn.hasNext()) {
int n = sn.nextInt();
long[] arr = new long[60];
arr[1]=3;
arr[2]=6;
arr[3]=6;
for(int i =4;i <= n;i++) {
arr[i] = arr[i-1] + arr[i-2]*2;
}
System.out.println(arr[n]);
}
sn.close();
}
}
又是一道递推题