dp 房屋染色
程序员文章站
2022-05-12 12:23:36
...
描述
中文English
这里有n
个房子在一列直线上,现在我们需要给房屋染色,分别有红色蓝色和绿色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小,返回最小的费用。
费用通过一个n
x3
的矩阵给出,比如cost[0][0]
表示房屋0
染红色的费用,cost[1][2]
表示房屋1
染绿色的费用。
所有费用都是正整数
您在真实的面试中是否遇到过这个题? 是
题目纠错
样例
样例 1:
输入: [[14,2,11],[11,14,5],[14,3,10]]
输出: 10
解释: 第一个屋子染蓝色,第二个染绿色,第三个染蓝色,最小花费:2 + 5 + 3 = 10.
样例 2:
输入: [[1,2,3],[1,4,6]]
输出: 3
相关题目
1310. 数组除了自身的乘积534. 打劫房屋 II516. 房屋染色 II514. 栅栏染色392. 打劫房屋
分析出自九章算法:
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) {
// write your code here
int N = costs.size(); // 房子的个数
int dp[N][3]; // dp数组
for (int i = 0; i < N; ++i) {
for (int j = 0; j < 3; ++j) {
if (i == 0) {
dp[i][j] = costs[i][j];
}
else{
if (j == 0) dp[i][j] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i][j];
if (j == 1) dp[i][j] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i][j];
if (j == 2) dp[i][j] = min(dp[i - 1][0], dp[i - 1][1]) + costs[i][j];
}
}
}
return min(dp[N - 1][0], min(dp[N - 1][1], dp[N - 1][2]));
}
};
上一篇: Mybatis以及MybatisPlus学习札记B
下一篇: 关于PHP文件及编码的有关问题