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