/* 解法二:
* 动态规划,假设连续三个栅栏分别为1,2,3;
* 则栅栏3要么和1,要么和2颜色不同,当前位置有k-1种可能颜色;
* 因此dp3 = (k-1) * dp1 + (k-1) * dp2;
*
*/
int numWays(int n, int K){
if(!n || !K) return 0;
int dp1 = K, dp2 = K*K, dp3;
int i;
for(i=2; i<n; i++){
dp3 = (K-1)*(dp1 + dp2);
dp1 = dp2;
dp2 = dp3;
}
if(n==1) return dp1;
if(n==2) return dp2;
return dp3;
}
leetcode-276-栅栏涂色-C语言
最新推荐文章于 2022-10-04 00:00:03 发布