-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpaintfence.cpp
41 lines (36 loc) · 1.09 KB
/
paintfence.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*s a fence with n posts, each post can be painted with one of the k colors.
You have to paint all the posts such that no more than two adjacent fence posts have the same color.
Return the total number of ways you can paint the fence.
Note: n and k are non-negative integers.
dp[3]=(k-1)*dp[1] + (k-1)*dp[2]
*
/
public class Solution {
public int numWays(int n, int k) {
// 当n=0时返回0
int dp[] = {0, k , k*k, 0};
if(n <= 2){
return dp[n];
}
for(int i = 2; i < n; i++){
// 递推式:第三根柱子要么根第一个柱子不是一个颜色,要么跟第二根柱子不是一个颜色
dp[3] = (k - 1) * (dp[1] + dp[2]);
dp[1] = dp[2];
dp[2] = dp[3];
}
return dp[3];
}
};
class Solution {
public:
int numWays(int n, int k) {
if (n == 0) return 0;
int same = 0, diff = k, res = same + diff;
for (int i = 2; i <= n; ++i) {
same = diff;
diff = res * (k - 1);
res = same + diff;
}
return res;
}
};