动态规划。
- 令 $n0_i$ 表示第 $i$ 个房子粉刷成红色,前 $i$ 个房子的最少花费;
- 令 $n1_i$ 表示第 $i$ 个房子粉刷成蓝色,前 $i$ 个房子的最少花费;
- 令 $n2_i$ 表示第 $i$ 个房子粉刷成绿色,前 $i$ 个房子的最少花费。
class Solution:
def minCost(self, costs: List[List[int]]) -> int:
n0, n1, n2 = costs[0]
for i in range(1, len(costs)):
n0, n1, n2 = min(n1, n2) + costs[i][0], min(n0, n2) + costs[i][1], min(n0, n1) + costs[i][2]
return min(n0, n1, n2)