注意:所有花費均為正整數。
輸入: [[17,2,17],[16,16,5],[14,3,19]]
輸出: 10
解釋: 將 0 號房子粉刷成藍色,1 號房子粉刷成綠色,2 號房子粉刷成藍色。最少花費: 2 + 5 + 3 = 10。
1、轉移方程
2、初始條件和邊界情況
3、計算順序
dp = [[max]*3 for _ in range(n+1)] # n+1 * 3 (從0-n,表示前n個房子的累計)
# 初始條件
dp[0][0], dp[0][1], dp[0][2] = 0, 0, 0 # 前0個房子,沒有房子
for i in range(1, n+1): # 房子編號0-(n-1),此處第i-1號房子,即當前的房子
# 第i-1號房子的顏色j(當前房子)
for j in range(3):
# 第i-2號房子的顏色k(前乙個房子)
for k in range(3):
if j != k: # 鄰居不撞色
# 前乙個房子染k色 + 當前房子染j色的cost(dp和cost下標不是對齊的)
dp[i][j] = min(dp[i][j], dp[i-1][k] + costs[i-1][j]) # 注意是costs[i-1][j]
return min(dp[n][0], dp[n][1], dp[n][2])
costs = [[14,2,11],
[11,4,5],
[14,3,10]] # 2+5+3=10
costs1 = [[17,2,17],
[16,16,5],
[14,3,19]] # 2+5+3=10
s = solution()
print(s.mincost(costs1))
其他優質解法
DP LeetCode265 粉刷房子 II
同類題 leetcode256.粉刷房子 序列型 假如有一排房子,共 n 個,每個房子可以被粉刷成k 種顏色中的一種,你需要粉刷所有的房子並且使其相鄰的兩個房子顏色不能相同。當然,因為市場上不同顏色油漆的 不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以乙個 n x...
Leetcode 256 粉刷房子
time 20190903 type easy 假如有一排房子,共 n 個,每個房子可以被粉刷成紅色 藍色或者綠色這三種顏色中的一種,你需要粉刷所有的房子並且使其相鄰的兩個房子顏色不能相同。當然,因為市場上不同顏色油漆的 不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費...
leetcode256 粉刷房子
假如有一排房子,共 n 個,每個房子可以被粉刷成紅色 藍色或者綠色這三種顏色中的一種,你需要粉刷所有的房子並且使其相鄰的兩個房子顏色不能相同。當然,因為市場上不同顏色油漆的 不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以乙個 n x 3 的矩陣來表示的。例如,co...