# LeetCode 265. Paint House II

#include <vector>
#include <iostream>
#include <climits>
using namespace std;

/*
Here are a row of n houses, each house can be painted with one of the k colors.
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 n * k color
matrix. For example, costs[0][0] is the cost of painting house 0 with color 0'
cost[1][2] is the cost of painting house 1 with color 2 and so on. Find the minimum
cost to paint all houses.
Note:
all costs are positive integers.
*/
// The dynamic equation is dp[i][j] = min(dp[i-1][m]) + cost[i][j])
// dp[i][j] means the total cost of painting ith house with jth color.
// i is in (0, n), j is in (0, k),  m is in (0, k) but m != j;
// this is the most stupid method: Time Complexity (O(K*K*N)), Space: O(K*N)
int minCostII(vector< vector<int> >& costs) {
int m = costs.size();
int n = costs[0].size();
vector< vector<int> > dp(m, vector<int>(n, 0));
for(int i = 0; i < m; ++i) {
dp[i][0] = costs[i][0];
}
for(int i = 1; i < n; ++i) {
for(int j = 0; j < m; ++j) {
int tmp = INT_MAX;
for(int c = 0; c < m; ++c) {
if(c == j) continue;
tmp = min(tmp, dp[c][i-1]);
}
dp[j][i] = tmp + costs[j][i];
}
}
int minCost = INT_MAX;
for(int i = 0; i < m; ++i) {
minCost = min(minCost, dp[i][n-1]);
}
return minCost;
}
// Since we dont need to save every already computed house state, to save time complexity and space complexity. Right now, time complexity lowers to O(N*K), Space to O(K)
int minCostIII(vector< vector<int> >& costs) {
if(costs.size() == 0) return 0;
int m = costs.size(), n = costs[0].size();
vector<int> dp(costs[0]); // initalize with the first row. First make all the house choose color 0.
for(int i = 1; i < m; ++i) {  // second colour is used to paint house k with low cost of paint color 0.
vector<int> down(n, INT_MAX);
vector<int> up(n, INT_MAX);
for(int j = 1; j < n; ++j) {
down[j] = min(down[j-1], dp[j-1]);
}
for(int j = n - 2; j >= 0; --j) {
up[j] = min(up[j+1], dp[j+1]);
}
for(int j = 0; j < n; ++j) {
dp[j] = min(up[j], down[j]) + costs[i][j];
}
}
int minValue = INT_MAX;
for(int i= 0; i < n; ++i) {
minValue = min(minValue, dp[i]);
}
return minValue;
}

int main(void) {
vector< vector<int> > costs{
{1, 2, 3},
{3, 2, 1},
{2, 2, 4}};
cout << minCostII(costs) << endl;
cout << minCostIII(costs) << endl;
}


I was asked a similar question in interviewing Google. The question was put as "An employee want to take the maximum holiday days. He can fly to any country to enjoy the holiday every week, with no care about air plane ticket cost". Given the maximum holiday days each week, he can only fly to K countries, compute how to plan the routine to enjoy the most. To solve this question is almost the same as above.

• 本文已收录于以下专栏：

## LeetCode 265. Paint House II（房子涂色）

• jmspan
• 2016年04月10日 16:22
• 561

## [leetcode] 265. Paint House II 解题报告

• qq508618087
• 2016年03月05日 12:50
• 1438

## LeetCode 265. Paint House II

#include #include #include using namespace std; /* Here are a row of n houses, each house can ...
• github_34333284
• 2016年06月02日 06:41
• 225

## LintCode:Paint House

LintCode:Paint Houseclass Solution: # @param {int[][]} costs n x 3 cost matrix # @return {in...
• u012225151
• 2016年04月25日 21:56
• 238

## leetcode 265. Paint House II

leetcode 265. Paint House II class Solution { public int minCostII(int[][] costs) { ...
• chengdezhi2011
• 2017年10月07日 12:26
• 96

## Leetcode 265. Paint House II

Leetcode 265. Paint House II
• zqh_1991
• 2016年10月06日 14:11
• 126

## Paint House

There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr...
• awawfwfw
• 2017年01月09日 13:57
• 190

## lintcode:Paint House

Description Notes Testcase Judge There are a row of n houses, each house can be painted wit...
• martin_liang
• 2016年03月25日 23:51
• 196

## [leetcode 256] Paint House

Question: There are a row of n houses, each house can be painted with one of the three colors: red,...
• Xiaohei00000
• 2016年01月13日 21:36
• 829

## 265. Paint House II

There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin...
• lilibaobao89
• 2017年06月15日 08:31
• 126

举报原因： 您举报文章：LeetCode 265. Paint House II 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)