Paint Fence
Basic Idea
dp[i] 表示到第 i 个 fence 为止的所有可能数量;
induction rule:
dp[i] = (k-1) * dp[i-1] + (k-1) * dp[i-2]
base case:
dp[0] = k;
dp[1] = k^2;class Solution { public int numWays(int n, int k) { if (n == 0 || k == 0) return 0; else if (n == 1) return k; else if (n == 2) return k * k; int[] dp = new int[n]; dp[0] = k; dp[1] = k * k; for (int i = 2; i < n; ++i) { dp[i] = (k - 1) * (dp[i-1] + dp[i-2]); } return dp[n - 1]; } }