Leetcode - Last Stone Weight II
Leetcode - Paint House II

Leetcode - Paint House

violet posted @ May 06, 2020 06:37:02 AM in 算法 with tags Algorithm Golang DP , 206 阅读

https://leetcode.com/problems/paint-house/

There are a row of n houses, each house can be painted with one of the three colors: red, blue or green. 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 3 cost matrix. For example, costs[0][0] is the cost of painting house 0 with color red; costs[1][2] is the cost of painting house 1 with color green, and so on... Find the minimum cost to paint all houses.

Note:
All costs are positive integers.

Example:

Input: [[17,2,17],[16,16,5],[14,3,19]]
Output: 10
Explanation: Paint house 0 into blue, paint house 1 into green, paint house 2 into blue. 
             Minimum cost: 2 + 5 + 3 = 10.

 

func minCost(costs [][]int) int {
    if len(costs) == 0 {
        return 0
    }
    n := len(costs)
    dp := make([][]int, n)
    for i := 0; i < len(dp); i++ {
        dp[i] = make([]int, 3)
    }
    dp[0][0] = costs[0][0]
    dp[0][1] = costs[0][1]
    dp[0][2] = costs[0][2]
    for i := 1; i < n; i++ {
        dp[i][0] = costs[i][0] + min(dp[i-1][1], dp[i-1][2])
        dp[i][1] = costs[i][1] + min(dp[i-1][0], dp[i-1][2])
        dp[i][2] = costs[i][2] + min(dp[i-1][0], dp[i-1][1])
    }
    return min(dp[n-1][0], dp[n-1][1], dp[n-1][2])
}

func min(nums ...int) int {
    n := nums[0]
    for _, i := range nums {
        if n > i {
            n = i
        }
    }
    return n
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter