There are a row of n houses, each house can be painted with one of the three colors: red, blue or green. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.
The cost of painting each house with a certain color is represented by a n x 3 cost matrix. For example, costs[0][0] is the cost of painting house 0 with color red; costs[1][2] is the cost of painting house 1 with color green, and so on... Find the minimum cost to paint all houses.
样例
Given costs = [[14,2,11],[11,14,5],[14,3,10]] return 10
house 0 is blue, house 1 is green, house 2 is blue, 2 + 5 + 3 = 10
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) {
if(null == costs || costs.length <= 0)
{
return 0;
}
int minRedCost = costs[0][0];
int minBlueCost = costs[0][1];
int minGreenCost = costs[0][2];
for(int i = 1;i < costs.length;i++)
{
int tempRedCost = minRedCost;
int tempBlueCost = minBlueCost;
int tempGreenCost = minGreenCost;
minRedCost = Math.min(tempBlueCost + costs[i][0], tempGreenCost + costs[i][0]);
minBlueCost = Math.min(tempRedCost+ costs[i][1], tempGreenCost + costs[i][1]);
minGreenCost = Math.min(tempRedCost + costs[i][2], tempBlueCost+ costs[i][2]);
}
return Math.min(Math.min(minRedCost, minBlueCost), minGreenCost);
}
}