LintCode Paint House

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

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
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);
}
}