dp 房屋染色

描述

中文English

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

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

 

所有费用都是正整数

您在真实的面试中是否遇到过这个题?  是

题目纠错

样例

样例 1:

输入: [[14,2,11],[11,14,5],[14,3,10]]
输出: 10
解释: 第一个屋子染蓝色,第二个染绿色,第三个染蓝色,最小花费:2 + 5 + 3 = 10.

样例 2:

输入: [[1,2,3],[1,4,6]]
输出: 3

相关题目

1310. 数组除了自身的乘积534. 打劫房屋 II516. 房屋染色 II514. 栅栏染色392. 打劫房屋

 

分析出自九章算法:


class Solution {
public:
    /**
     * @param costs: n x 3 cost matrix
     * @return: An integer, the minimum cost to paint all houses
     */
    int minCost(vector<vector<int>> &costs) {
        // write your code here
        int N = costs.size();   // 房子的个数
        int dp[N][3];           // dp数组
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < 3; ++j) {
                if (i == 0) {
                    dp[i][j] = costs[i][j];
                }
                else{
                    if (j == 0) dp[i][j] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i][j];
                    if (j == 1) dp[i][j] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i][j];
                    if (j == 2) dp[i][j] = min(dp[i - 1][0], dp[i - 1][1]) + costs[i][j];
                }
            }
        }
        return min(dp[N - 1][0], min(dp[N - 1][1], dp[N - 1][2]));
    }
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值