有关网站建设新闻资讯,搜狗关键词排名查询,网站和数字界面设计师,大型行业门户网站开发假如有一排房子#xff0c;共 n 个#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。
当然#xff0c;因为市场上不同颜色油漆的价格不同#xff0c;所以房子粉刷成不同颜色的花…假如有一排房子共 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);}
}