Paint House III — LeetCode 1473 Python Solution
- Problem
- #1473
- Pattern
- Dynamic Programming
- Reading time
- 6 min
- Source
- leetcode.com
The problem
There is a row of m houses in a small city, each house must be painted with one of the n colors (labeled from 1 to n), some houses that have been painted last summer should not be painted again. A neighborhood is a maximal group of continuous houses that are painted with the same color.
Example
- Input
- houses = [0,0,0,0,0], cost = [[1,10],[10,1],[10,1],[1,10],[5,1]], m = 5, n = 2, target = 3
- Output
- 9
- Explanation
- Paint houses of this way [1,2,2,1,1]
Python solution
class Solution:
def minCost(
self, houses: List[int], cost: List[List[int]], m: int, n: int, target: int
) -> int:
f = [[[inf] * (target + 1) for _ in range(n + 1)] for _ in range(m)]
if houses[0] == 0:
for j, c in enumerate(cost[0], 1):
f[0][j][1] = c
else:
f[0][houses[0]][1] = 0
for i in range(1, m):
if houses[i] == 0:
for j in range(1, n + 1):
for k in range(1, min(target + 1, i + 2)):
for j0 in range(1, n + 1):
if j == j0:
f[i][j][k] = min(
f[i][j][k], f[i - 1][j][k] + cost[i][j - 1]
)
else:
f[i][j][k] = min(
f[i][j][k], f[i - 1][j0][k - 1] + cost[i][j - 1]
)
else:
j = houses[i]
for k in range(1, min(target + 1, i + 2)):
for j0 in range(1, n + 1):
if j == j0:
f[i][j][k] = min(f[i][j][k], f[i - 1][j][k])
else:
f[i][j][k] = min(f[i][j][k], f[i - 1][j0][k - 1])
ans = min(f[-1][j][target] for j in range(1, n + 1))
return -1 if ans >= inf else ansComplexity
| Measure | Complexity |
|---|---|
| Time | O(m \times n^2 \times \textit{target}) |
| Space | O(m \times n \times \textit{target}) auxiliary |
Pattern: Dynamic Programming
Define a state, write the transition, and stop recomputing the same subproblem. LeetCode 1473. Paint House III is filed here on both counts: the reference solution below belongs to the algorithm family this hub collects, and LeetCode tags it Dynamic Programming.
The dynamic programming guide has the Python template for the pattern and the 481 LeetCode problems that use it.
Related problems
Frequently asked questions
- How hard is LeetCode 1473. Paint House III?
- LeetCode 1473. Paint House III is rated Hard on LeetCode.
- What is the time complexity of LeetCode 1473. Paint House III?
- The Python solution on this page runs in O(m \times n^2 \times \textit{target}).
- What is the space complexity of LeetCode 1473. Paint House III?
- The Python solution on this page uses O(m \times n \times \textit{target}) auxiliary space.
- What topics does LeetCode 1473. Paint House III cover?
- LeetCode 1473. Paint House III is tagged Array and Dynamic Programming on LeetCode.