LC: 265. Paint House II
https://leetcode.com/problems/paint-house-ii/
265. Paint House II
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 an n x k cost matrix costs.
For example,
costs[0][0]is the cost of painting house0with color0;costs[1][2]is the cost of painting house1with color2, and so on...
Return the minimum cost to paint all houses.
Example 1:
Input: costs = [[1,5,3],[2,9,4]]
Output: 5
Explanation:
Paint house 0 into color 0, paint house 1 into color 2. Minimum cost: 1 + 4 = 5;
Or paint house 0 into color 2, paint house 1 into color 0. Minimum cost: 3 + 2 = 5.Example 2:
Input: costs = [[1,3],[2,4]]
Output: 5Constraints:
costs.length == ncosts[i].length == k1 <= n <= 1002 <= k <= 201 <= costs[i][j] <= 20
Follow up: Could you solve it in O(nk) runtime?
The Essence:
Wir können bemerken, dass wir dynamische Programmierung anwenden können, weil wir die Lösungen vorheriger Teilaufgaben für nächste Aufgaben optimal nutzen können. Es ist eine Verallgemeinerung von https://github.com/spiralgo/algorithms/issues/44
Details:
Man kann die niedrigsten Kosten von dem vorherigen Haus speichern. Dann soll alle Farbmöglichkeiten des nächsten Haus mit diesen Kosten addiert werden. Die Ausnahme ist die gleiche Farbe, wofür man die zweiten niedrigsten Kosten sowie der Index der Farbe mit minimalen Kosten zur Kontrolle auch speichern muss.
Default Code:
Last updated