leetcode-192周赛-5431.-给房子涂色 III
题目描述:
class Solution: def minCost(self, houses: List[int], cost: List[List[int]], m: int, n: int, target: int) -> int: fcur = [[-1] * n for _ in range(target + 1)] if houses[0] == 0: for i in range(n): fcur[1][i] = cost[0][i] else: fcur[1][houses[0] - 1] = 0 for i in range(1, m): fprv = fcur fcur = [[-1] * n for _ in range(target + 1)] if houses[i] == 0: for j in range(target + 1): for cp in range(n): if fprv[j][cp] == -1: continue for cc in range(n): if cc == cp: jn = j else: jn = j + 1 if jn > target: continue if fcur[jn][cc] == -1 or fcur[jn][cc] > fprv[j][cp] + cost[i][cc]: fcur[jn][cc] = fprv[j][cp] + cost[i][cc] else: for j in range(target + 1): for cp in range(n): if fprv[j][cp] == -1: continue cc = houses[i] - 1 if cc == cp: jn = j else: jn = j + 1 if jn > target: continue if fcur[jn][cc] == -1 or fcur[jn][cc] > fprv[j][cp]: fcur[jn][cc] = fprv[j][cp] res = [x for x in fcur[target] if x != -1] if len(res) == 0: return -1 return min(res)