LintCode 房屋染色

题目

这里有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

代码

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(costs != null && costs.length == 0) return 0;
        for(int i=1;i<costs.length;i++) {
            // 涂第一种颜色的话,上一个房子就不能涂第一种颜色,这样我们要在上一个房子的第二和第三个颜色的最小开销中找最小的那个加上
            costs[i][0] = costs[i][0] + Math.min(costs[i-1][1], costs[i-1][2]);
            // 涂第二或者第三种颜色同理
            costs[i][1] = costs[i][1] + Math.min(costs[i-1][0], costs[i-1][2]);
            costs[i][2] = costs[i][2] + Math.min(costs[i-1][1], costs[i-1][0]);
            
        }
        // 返回涂三种颜色中开销最小的那个
        return Math.min(Math.min(costs[costs.length-1][0], costs[costs.length-1][1]), costs[costs.length-1][2]);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从小到大,我们一直在经历考试。考试一直伴随着我们,上学的过程有考试,期中考试,期末考试,中招考试,还有高考。终于上...
    Rumlena阅读 1,131评论 0 0
  • 第七章 折磨 总公司报道,然后,四个人被发配,成为了一票老头老太太的行动保姆。 “你说,大boss是不是玩的有点太...
    chief风阅读 2,900评论 0 0
  • 受姐姐影响,加入写字大军。我说我要每天写一篇,其实我自己都不相信!不过管他的。大话先说出来,说不定我就坚持下来了呢...
    笪尔文阅读 851评论 0 0