假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。 例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。
class Solution {
public int minCost(int[][] costs) {
if(costs==null || costs.length==0 || costs[0].length==0){
return 0;
}
//dp[i][j]表示刷到第i间房子第j种颜色时,需要花费的总费用
int[][] dp=new int[costs.length][3];
for(int i=0;i<3;i++){
dp[0][i]=costs[0][i];
}
int length=costs[0].length;
for(int i=1;i<costs.length;i++){
for(int j=0;j<3;j++){
dp[i][j]=Math.min(dp[i-1][(j+1)%length],dp[i-1][(j+2)%length])+costs[i][j];
}
}
return Math.min(dp[costs.length-1][0],Math.min(dp[costs.length-1][1],dp[costs.length-1][2]));
}
}
2. 粉刷房子-II
0x0 题目详情
假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x k 的矩阵来表示的。 例如,costs[0][0] 表示第 0 号房子粉刷成 0 号颜色的成本花费;costs[1][2] 表示第 1 号房子粉刷成 2 号颜色的成本花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。