杭电oj —— 2045(递推问题)

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();
	}
}

又是一道递推题

猜你喜欢

转载自blog.csdn.net/LiLi_code/article/details/88085102