假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。

当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。

例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。

注意:

所有花费均为正整数。

示例:

输入: [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。
     最少花费: 2 + 5 + 3 = 10。

思路:dp[i][0,1,2]分别代表第i个格子必须用红、蓝、绿刷的最优解。则dp[i][0]的前一个格子可以是蓝或绿,也就是dp[i-1][1和dp[i-1][2]两种情况,取最优解加上cost[i][0]即可。另两种类似。

dp[i]只和dp[i-1]有关,所以用几个变量记录即可。

class Solution {public int minCost(int[][] costs) {if(costs == null || costs.length == 0) return 0;int r_cost = costs[0][0];int b_cost = costs[0][1];int g_cost = costs[0][2];for(int i = 1; i < costs.length; i++){int r_tmp = r_cost;int b_tmp = b_cost;int g_tmp = g_cost;r_cost = costs[i][0] + Math.min(b_tmp, g_tmp);b_cost = costs[i][1] + Math.min(r_tmp, g_tmp);g_cost = costs[i][2] + Math.min(r_tmp, b_tmp);}return  Math.min(Math.min(r_cost, b_cost),g_cost);}
}

leetcode256. 粉刷房子相关推荐

  1. LeetCode--256. 粉刷房子(动态规划)

    粉刷房子(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:简单 2. 题目分析 这道题目是一道典型的动态规划问题,如果我们只把目光放在一个最少花费的身上,状态转化方 ...

  2. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  3. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  4. LeetCode--265. 粉刷房子Ⅱ(动态规划)

    粉刷房子Ⅱ(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题目是256. 粉刷房子的进阶题,其实解题思路和256题是一样的: 动态规划 ...

  5. Leetcode学习笔记(粉刷房子)

    091. 粉刷房子 用矩阵spend记录下来当前的最小花费,spend[i][1]表示第i个房子涂成蓝色时共支出的最小花费 class Solution:def minCost(self, costs ...

  6. Leetcode 256.粉刷房子

    Time: 20190903 Type: Easy 题目描述 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相 ...

  7. 【每日一题 6.25】粉刷房子

    开始之前先给自己打个鸡血吧: A journey of a thousand miles begins with a single step. 千里之行始于足下. 题源:https://leetcod ...

  8. leetcode 1473. 粉刷房子 III(dp)

    在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ).有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色. 我们将连续相同颜色尽可能多的房 ...

  9. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)

    3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...

最新文章

  1. Cash Shuffle初次测试成功,BCH隐私研究逐步推进
  2. 【整理】ABAP开发中的屏幕跳转
  3. oraclemt 无法启动服务_电脑文件无法设置共享的解决方法
  4. 使用脚本在Linux服务器上自动安装Kubernetes的包管理器Helm
  5. 推荐:解析“extern”
  6. Win7下DB2 Express-C 9.7.2的卸载与安装(上)
  7. java链表的输出_Java输出链表倒数第k个节点
  8. BiLSTM-CRF模型中的CRF层讲解
  9. python读取第一行设为字典_将csv读入字典,第一行成为名称
  10. 男女洗澡前后区别,太形象了!(文末送书)
  11. php讲用户输入的值存入数组,如何将表单输入数组转换为PHP数组
  12. 当当图书每满100减50,两种优惠券助你两手薅羊毛
  13. AWS的十条军规: 过去十年的经验总结
  14. windows无法连接到打印机
  15. java web 是什么_什么是javaweb开发
  16. 电脑桌面有HTML一直删除不了,程序员电脑桌面是什么样的? 网友: IE浏览器必删, 不能留!...
  17. 2022年电设省赛碎碎念【C题小车题省一】
  18. Swift 周报 第六期
  19. DL框架之DL4J/Deeplearning4j:深度学习框架DL4J/Deeplearning4j的简介、安装、使用方法之详细攻略
  20. 一小时内学会Abaqus脚本编程秘籍

热门文章

  1. linux内核编译后 make: 警告:检测到时钟错误.,系统时钟 make: 警告:检测到时钟错误。您的创建可能是不完整的。...
  2. MinGW编译boost库
  3. autotools使用
  4. pandas划分数据
  5. 【转】DCM(DICOM)医学影像文件格式详解
  6. 第十二节:Lambda、linq、SQL的相爱相杀(1)
  7. html中点击照片时放大缩小,基于jquery实现一张图片点击鼠标放大再点缩小
  8. php统计在线时长,js统计网站运行时长
  9. Python 数据分析三剑客之 Pandas(二):Index 索引对象以及各种索引操作
  10. 国密算法SM2-java实现