DP LeetCode256 粉刷房子

2021-10-06 12:46:42 字數 1544 閱讀 2145

注意:所有花費均為正整數。

輸入: [[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...