RPG问题

Problem Description

有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.
 
Input
输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。
 

 

Output
对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。
 

 

Sample Input
1 2
 

 

Sample Output
3 6

 思路:

有k种颜色染n个块
f[n]=(k-2)*f[n-1]+(k-1)*f[n-2];
当前方案数有前一状态的两种可能推过来(1和n-1块的颜色是否一致)。
当然上述式子在n>=4是才能用。
f[1]=k; f[2]=k*(k-1); f[3]=k*(k-1)*(k-2);
如果n很大的会话,可以利用矩阵乘法快速幂进行加速。
可以参考Matrix67的博客

AC代码:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        final int N = 50;
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int input = sc.nextInt();
            long[] arr = new long[N];
            arr[0] = 3;
            arr[1] = 6;
            arr[2] = 6;
            arr[3] = 18;
            for (int i = 4; i < N; i++) {
                arr[i] = arr[i-1] + 2*arr[i-2];
            }
            System.out.println(arr[input-1]);
        }
    }
}

  

posted @ 2018-03-04 15:37  ixummer  阅读(351)  评论(0编辑  收藏  举报