[leetcode] 256. Paint House 解题报告

题目链接:https://leetcode.com/problems/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.

Note:
All costs are positive integers.


思路: 又和paint fence搞混了, 以为不超过两个相邻的可以染同一种颜色, 写的要死了. 然后才发现原来是没有两个相邻的房子可以染同一种颜色.

这样的话题目就简单多了, 每一次只要找到上一个房子不是染这个颜色的最小的价格就行了.

代码如下:

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        if(costs.size() == 0) return 0;
        for(int i = 1; i< costs.size(); i++)
        {
            costs[i][0] += min(costs[i-1][1], costs[i-1][2]);
            costs[i][1] += min(costs[i-1][0], costs[i-1][2]);
            costs[i][2] += min(costs[i-1][0], costs[i-1][1]);
        }
        int len = costs.size();
        return *min_element(costs[len-1].begin(), costs[len-1].end());
    }
};
参考: https://leetcode.com/discuss/51721/simple-java-dp-solution

你可能感兴趣的:(LeetCode,动态规划)