515.Paint House-房屋染色(中等题)

本文探讨了如何通过动态规划解决房屋染色问题,确保相邻房屋颜色不同且总费用最低。给出了具体算法实现及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻转字符串

  1. 题目

    这里有n个房子在一列直线上,现在我们需要给房屋染色,分别有红色蓝色和绿色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小。

    费用通过一个nx3 的矩阵给出,比如cost[0][0]表示房屋0染红色的费用,cost[1][2]表示房屋1染绿色的费用。

    注意事项
    所有费用都是正整数

  2. 样例

    costs = [[14,2,11],[11,14,5],[14,3,10]] return 10
    房屋 0 蓝色, 房屋 1 绿色, 房屋 2 蓝色, 2 + 5 + 3 = 10

  3. 题解

    动态规划题,我们看第i个房子涂什么颜色,由于总共只有三种颜色,所以当第i个房子涂红色时,第i-1个房子只能涂蓝色和绿色,依次递推。只要将这三种情况得出的答案中的最小值就是最优解。可以直接利用原数组进行递推计算,无需使用额外空间。

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;
        }
        int m = costs.length-1;
        for(int i = 1; i <= m; 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[m][0], costs[m][1]), costs[m][2]);
    }
}

Last Update 2016.12.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值