zoukankan      html  css  js  c++  java
  • [LintCode] Paint House 粉刷房子

    There are a row of n houses, each house can be painted with one of the three colors: red, blue or green. 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 3 cost matrix. For example, costs[0][0] is the cost of painting house 0 with color red; costs[1][2] is the cost of painting house 1 with color green, and so on... Find the minimum cost to paint all houses.

    Notice

    All costs are positive integers.

    Example
    Given costs = [[14,2,11],[11,14,5],[14,3,10]] return 10

    house 0 is blue, house 1 is green, house 2 is blue, 2 + 5 + 3 = 10

    LeetCode上的原题,请参见我之前的博客Paint House

    解法一:

    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) {
            if (costs.empty() || costs[0].empty()) return 0;
            vector<vector<int>> dp = costs;
            for (int i = 1; i < dp.size(); ++i) {
                for (int j = 0; j < 3; ++j) {
                    dp[i][j] += min(dp[i - 1][(j + 1) % 3], dp[i - 1][(j + 2) % 3]);
                }
            }
            return min(dp.back()[0], min(dp.back()[1], dp.back()[2]));
        }
    };

    解法二:

    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) {
            if (costs.empty() || costs[0].empty()) return 0;
            vector<vector<int>> dp = costs;
            for (int i = 1; i < dp.size(); ++i) {
                dp[i][0] += min(dp[i - 1][1], dp[i - 1][2]);
                dp[i][1] += min(dp[i - 1][0], dp[i - 1][2]);
                dp[i][2] += min(dp[i - 1][0], dp[i - 1][1]);
            }
            return min(dp.back()[0], min(dp.back()[1], dp.back()[2]));
        }
    };
  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/grandyang/p/5448512.html
Copyright © 2011-2022 走看看