剑指 Offer II 091. 粉刷房子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int minCost(int[][] costs) {
// 定义 dp[i][j] 为粉刷至 i 号房子且 i 号房子为 j 颜色时最少的花费成本
int[][] dp = new int[costs.length][3];
dp[0][0] = costs[0][0];
dp[0][1] = costs[0][1];
dp[0][2] = costs[0][2];

for (int i = 1; i < dp.length; i++) {
dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + costs[i][0];
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + costs[i][1];
dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + costs[i][2];
}

return Math.min(Math.min(dp[dp.length - 1][0], dp[dp.length - 1][1]), dp[dp.length - 1][2]);
}
}

References

剑指 Offer II 091. 粉刷房子