确定状态:
这个题其实和之前的那个阿里矩阵题是一样的,只不过是状态转移方程稍有不同,paint house就是把相邻的情况排除了。
dp[i][j]代表从0paint到i号房子,在i号房子涂j号色时用的最少costs。
因此状态转移方程如下
dp[i][j] = dp[i][j] + min{ dp[i-1][k]} 其中k=1....m 且k!=j
初始条件和边界条件
dp[i][j]=costs[i][j]
计算顺序
dp[1][0] dp[0][1] dp[0][2]
....
dp[n][0] dp[n][1] dp[n][2]
返回结果
min{ dp[n][0] , dp[n][1] ,dp[n][2] }
代码
public int minCost(int[][] costs) {
//corner case
if(costs==null||costs.length==0)return 0;
for(int i=1;i<costs.length;i++){
costs[i][0]+=Math.min(costs[i-1][1],costs[i-1][2]);
costs[i][1]+=Math.min(costs[i-1][0],costs[i-1][2]);
costs[i][2]+=Math.min(costs[i-1][1],costs[i-1][0]);
}
int n = costs.length-1;
return Math.min(Math.min(costs[n][0], costs[n][1]), costs[n][2]);
}