美文网首页
动态规划之三角形最短路径和

动态规划之三角形最短路径和

作者: wwq2020 | 来源:发表于2020-07-27 14:00 被阅读0次

题目

给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.

思路

把三角形转换成靠左对齐的一个个子块理解
那么到第 i 层的第 j 个子块的最短路径和等于:
第 i-1 层第 j-1 个子块加第 i 层的第 j 个子块
第 i-1 层第 j 个子块加第 i 层的第 j 个子块

这两者的最小值

状态转移方程

dp[i][j] = min(dp[i-1][j-1]+dp[i-1][j])+triangle[i][j]

最终代码

func calc(triangle [][]int) int {
    length := len(triangle)
    if length < 1 {
        return 0
    }
    if length == 1 {
        return triangle[0][0]
    }
    dp := make([][]int, length)
    for i, each := range triangle {
        dp[i] = make([]int, len(each))
    }
    result := math.MaxInt32
    dp[0][0] = triangle[0][0]
    dp[1][1] = triangle[1][1] + triangle[0][0]
    dp[1][0] = triangle[1][0] + triangle[0][0]

    for i := 2; i < length; i++ {
        for j := 0; j < len(triangle[i]); j++ {
            if j == 0 {
                dp[i][j] = dp[i-1][j] + triangle[i][j]
            } else if j == (len(triangle[i]) - 1) {
                dp[i][j] = dp[i-1][j-1] + triangle[i][j]
            } else {
                dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]
            }
        }
    }
    for _, k := range dp[length-1] {
        result = min(result, k)
    }
    return result
}

func min(a, b int) int {
    if a > b {
        return b
    }
    return a
}


相关文章

  • 动态规划之三角形最短路径和

    题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 思路 把三角形转换成靠左对...

  • 最短路径 之 Floyd 算法

    • 最短路径 之 Dijkstra 算法• 最短路径 之 Bellman 算法 Floyd算法是基于一种动态规划的...

  • Asynchronous dynamic programming

    本文代码点击这里下载。 动态规划方法 如果节点位于到的最短路径上,那么到的路径也必须是和之间的最短路径。这种“分而...

  • LeetCode-120-三角形的最小路径和

    LeetCode-120-三角形的最小路径和 动态规划介绍 题目 给定一个三角形,找出自顶向下的最小路径和。每一步...

  • 理解动态规划、BFS和DFS

    一、动态规划 找到两点间的最短路径,找最匹配一组点的线,等等,都可能会用动态规划来解决。 参考如何理解动态规划中,...

  • 动态规划之矩形最短路径和

    题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小,每次...

  • [leetcode刷题笔记]动态规划之多维dp问题

    记录几道使用动态规划问题。 三角形最小路径和 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相...

  • 维特比算法

    动态规划求最短路径算法,与穷举法相比优点在于大大降低了时间复杂度; 假如从起点A到终点S的最短路径Road经过点B...

  • LeetCode-Minimum Path Sum

    题目要求:相比较于unique path,寻找一条最短路径,仍然采用动态规划:Method: flag[i][j]...

  • floyd算法解析

    floyd算法可求得多源点间的最短路径算法使用动态规划求解: 状态转移方程 dp[i][j][k]=min(dp[...

网友评论

      本文标题:动态规划之三角形最短路径和

      本文链接:https://www.haomeiwen.com/subject/nfszlktx.html