LeetCode 256. 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.
*/
// This method is so far the cleanest I have seen. Copied from others.
public int minCost(vector< vector<int> >& costs) {
  if(costs.size() == 0 || costs[0].size() == 0) return 0;
  int min_red = costs[0][0];
  int min_blue = costs[0][1];
  int min_green = costs[0][2];
  int tmp_red, tmp_blue, tmp_green;
  for(int i = 1; i < costs.size(); ++i) {
    tmp_red = min_red;
    tmp_blue = min_blue;
    tmp_green = min_green;
    min_red = min(tmp_blue, tmp_green) + costs[i][0];
    min_blue = min(tmp_red, tmp_green) + costs[i][1];
    min_green = min(tmp_blue, tmp_red) + costs[i][2];
  }
  return min(min_red, min(min_blue, min_green));
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值