2017.9.5
dp[i][j] 分别用来记录,第i个房子染红色,绿色和蓝色时的总费用。
其中状态转移方程为: dp【i】【红色】 = min(dp【i-1】【蓝色】,dp【i-1】【绿色】)
其他的也是类似的。
public class Solution {
/**
* @param costs n x 3 cost matrix
* @return an integer, the minimum cost to paint all houses
*/
public int minCost(int[][] costs) {
int n = costs.length;// 房子的数目
if(n == 0){
return 0;
}
// dp用来记录第i房子分别染红色,绿色和蓝色时,目前的总费用。
int [][]dp = new int[n][3];
dp[0] = costs[0];
for(int i = 1; i < n; 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][1],dp[i-1][0]) + costs[i][2];
}
int money = getMin(dp[n-1][0],dp[n-1][1],dp[n-1][2]);
return money;
}
public int getMin(int a, int b, int c){
return Math.min(a, Math.min(b, c));
}
}