一、题目解析
二、算法解析
每个房子可以被粉刷成三种颜色中的一种,需要计算在满足相邻房子的颜色不同的情况下粉刷所有房子的最小花费成本。由于当已知粉刷前 i 个房子的最小花费成本时,根据粉刷第 i+1 号房子的花费成本可以计算粉刷前 i+1 个房子的最小花费成本,因此可以使用动态规划计算最小花费成本。
由于每个房子可以被粉刷成三种颜色中的一种,因此需要分别考虑粉刷成三种颜色时的最小花费成本。
用 dp[i][j] 表示粉刷第 0 号房子到第 i 号房子且第 i 号房子被粉刷成第 j 种颜色时的最小花费成本。由于一共有 n 个房子和 3 种颜色,因此 0≤i<n,0≤j<3。
对于1<=i<n,粉刷第i个房子时颜色不能与第i-1个房子相同,因此将i粉刷成该颜色时,i-1必须为另外两个颜色之一,由此得出状态转移方程为:
dp[i][j]=min(dp[i−1][(j+1)mod3],dp[i−1][(j+2)mod3])+costs[i][j]。
计算结束后dp[n-1]中得最小值即为所求。
三、代码解析