Question
There are a row of n houses, each house can be painted with one of the k colors. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.
The cost of painting each house with a certain color is represented by a n x k cost matrix. For example, costs[0][0] is the cost of painting house 0 with color 0; costs[1][2] is the cost of painting house 1 with color 2, and so on… Find the minimum cost to paint all houses.
Note:
All costs are positive integers.
Follow up:
Could you solve it in O(nk) runtime?
Hide Tags Dynamic Programming
Hide Similar Problems (M) Product of Array Except Self (H) Sliding Window Maximum (M) Paint House (E) Paint Fence
Solution
time complexity: O(nk)
space complexity: O(k)
class Solution(object):
def minCostII(self, costs):
"""
:type costs: List[List[int]]
:rtype: int
"""
n = len(costs)
if costs==None or n==0:
return 0
k = len(costs[0])
if k==0:
return 0
last,cur = [0]*k, [0]*k
last,cur = costs[0][:], costs[0][:]
for ind in range(1,n):
for kind in range(k):
temp = [elem for elem in range(k) if elem!=kind]
temp = [last[elem] for elem in temp]
cur[kind] = costs[ind][kind] + min(temp)
last = cur[:]
return min(cur)