标签:
There are a row of n
houses, each house can be painted with one of the k
colors. 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 k
cost matrix. For example, costs[0][0]
is the cost of painting house 0
with color 0
; costs[1][2]
is the cost of painting house 1
with color 2
, and so on... Find the minimum cost to paint all houses.
Given n
= 3, k
= 3, costs
= [[14,2,11],[11,14,5],[14,3,10]]
return10
house 0 is color 2, house 1 is color 3, house 2 is color 2, 2 + 5 + 3 = 10
分析:
这题和在一个矩阵上冲一个点走到另一个点所需的cost是一样的。
从第二个房子开始,找出使用和上一家不同颜色能够获取的最小的cost。最后一排就可以算出总的价格。
1 public class Solution { 2 /** 3 * @param costs n x k cost matrix 4 * @return an integer, the minimum cost to paint all houses 5 */ 6 public int minCostII(int[][] costs) { 7 if (costs == null || costs.length == 0 || costs[0].length == 0) return 0; 8 9 for (int i = 1; i < costs.length; i++) { 10 for (int j = 0; j < costs[0].length; j++) { 11 int tempMin = Integer.MAX_VALUE; 12 for (int k = 0; k < costs[0].length; k++) { 13 if (k != j) { 14 if (tempMin > costs[i - 1][k]) { 15 tempMin = costs[i - 1][k]; 16 } 17 } 18 } 19 costs[i][j] += tempMin; 20 } 21 } 22 int tempMin = Integer.MAX_VALUE; 23 for (int j = 0; j < costs[0].length; j++) { 24 if (costs[costs.length - 1][j] < tempMin) { 25 tempMin = costs[costs.length - 1][j]; 26 } 27 } 28 return tempMin; 29 } 30 }
标签:
原文地址:http://www.cnblogs.com/beiyeqingteng/p/5655104.html