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]));
        }
    };
  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/grandyang/p/5448512.html
Copyright © 2011-2022 走看看