这里有n个房子在一列直线上,现在我们需要给房屋染色,分别有红色蓝色和绿色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小。
费用通过一个nx3 的矩阵给出,比如cost[0][0]表示房屋0染红色的费用,cost[1][2]表示房屋1染绿色的费用。
注意事项
所有费用都是正整数
costs = [[14,2,11],[11,14,5],[14,3,10]] return 10
房屋 0 蓝色, 房屋 1 绿色,
房屋 2 蓝色, 2
+ 5 + 3 = 10
/*
动态规划题,我们看第i个房子涂什么颜色,由于总共只有三种颜色,所以当第i个房子涂红色时,
第i-1个房子只能涂蓝色和绿色,依次递推。只要将这三种情况得出的答案中的最小值就是最优解。可以直接利用原数组进行递推计算,无需使用额外空间。
*///博客
public class Solution {
public int minCost(int[][] costs){
if(costs == null || costs.length ==0)return 0;
int len = costs.length-1;
for(int i=1;i<=len;i++){
costs[i][0] +=Math.min(costs[i-1][1],costs[i-1][2]);
costs[i][1] +=Math.min(costs[i-1][0],costs[i-1][2]);
costs[i][2] +=Math.min(costs[i-1][0],costs[i-1][1]);
}
return Math.min(Math.min(costs[len][0],costs[len][1]),costs[len][2]);
}
}
本文探讨了在直线上排列的房屋染色问题,目标是选择颜色以使相邻房屋颜色不同,并最小化总成本。染色费用由一个矩阵给出,其中不同颜色对应不同的费用。解决方案需要考虑如何有效地在红色、蓝色和绿色之间切换,以达到最低费用。
753

被折叠的 条评论
为什么被折叠?



