1. 线性DP

经典问题:

120. 三角形最小路径和  https://leetcode-cn.com/problems/triangle/

func minimumTotal(triangle [][]int) int {
    n := len(triangle)
    dp := make([][]int,n)
    for i:=0;i<n;i++{
        dp[i] = make([]int,i+1)
    }
    dp[0][0] = triangle[0][0]
    for i:=1;i<n;i++{
        for j:=0;j<=i;j++{
            if j==0 {
                dp[i][j] = dp[i-1][j]+triangle[i][j]
            }else if j==i{
                dp[i][j] = dp[i-1][j-1] + triangle[i][j]
            }else{
                dp[i][j] = MIN(dp[i-1][j-1]+triangle[i][j],dp[i-1][j]+triangle[i][j]) 
            }
        }
    }
    res := dp[n-1][0]
    for j:=0;j<=n-1;j++{
        res = MIN(res,dp[n-1][j])
    }
    return res
}

func MIN(i,j int) int{
    if i<j{
        return i
    }else{
        return j
    }
}

  

猜你喜欢

转载自www.cnblogs.com/wsw-seu/p/12734988.html