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)

 

posted @ 2020-06-11 11:10  oldby  阅读(214)  评论(0编辑  收藏  举报