描述:我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。
解题:本题表述有错误,应该是:至多有两个柱子颜色相同,用动态规划(理解的不是很好,)
必须保证任意两个相邻的柱子颜色不同,求有多少种染色方案。
样例:
n = 3, k = 2, return 6
post 1, post 2, post 3
way1 0 0 1
way2 0 1 0
way3 0 1 1
way4 1 0 0
way5 1 0 1
way6 1 1 0
public class Solution {
/**
* @param n non-negative integer, n posts
* @param k non-negative integer, k colors
* @return an integer, the total number of ways
*/
public int numWays(int n, int k) {
// Write your code here
// 最多只能有两个相邻的柱子颜色相同
if(n==0) return 0;
if(n==1) return k;
if(n==2) return k*k;
int pre=k;
int now=k*k;
for(int i=3;i<=n;i++){
int temp=now;
now=(pre+now)*(k-1);
pre=temp;
}
return now;
}
}