[Leetcode]Paint House II
2015-09-15 17:28
549 查看
There 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 a
matrix. For example,
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.
Follow up:
Could you solve it in O(nk) runtime?
same color.
The cost of painting each house with a certain color is represented by a
n x kcost
matrix. For example,
costs[0][0]is the cost of painting house 0 with color 0;
costs[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.
Follow up:
Could you solve it in O(nk) runtime?
/*algorithm: dp soluton ,similar paint house problem for path[0..i] level i; dp[i][0] = min(dp[i-1][1],...,dp[i-1][k-1]) + dp[i][0]; dp[i][1] = min(dp[i-1][0],dp[i-1][2],...,dp[i-1][k-1]) + dp[i][1] dp[i][j] = min(dp[i-1][0],...dp[i-1][j-1],dp[i-1][j+1],..dp[i-1][k-1]) + dp[i][j] the path min cost is min(dp[n-1][0...k-1]) time O(n*k*k) space O(1) */ int minCostII(vector<vector<int> >&costs) { int n = costs.size(); if(n < 1)return 0; int k = costs[0].size(); for(int i = 1;i < n;i++){ for(int j = 0;j < k;j++){ int cost = INT_MAX; for(int m = 0;m < k;m++){ if(m != j)cost = min(costs[i-1][m],cost); } costs[i][j] += cost; } } //for last level int cost = INT_MAX; for(int i = 0;i < k;i++) cost = min(cost,cost[n-1][i]); return cost; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例