动态规划(dynamic programing)

爱⌒轻易说出口 提交于 2020-02-05 21:26:47

关键点

  • 递推!(递归+记忆化)
  • 状态定义:opt[n],重中之重!
  • 状态转移方程:opt[n] = bestOf(opt[n-1], opt[n-2], ...)
  • 最优子结构

比较

回溯(递归)- 重复计算,通常找不到最优子结构。
贪心 - 永远局部最优,局部最优不一定是全局最优。
动态规划 - 记录局部最优子机构(避免重复计算,再通过状态转移方程再递推下一个),集上述两者优点。

题目

leetcode 120. 三角形最小路径和

func minimumTotal(triangle [][]int) int {
    n := len(triangle)
    mini := triangle[n-1]
    // 从下往上进行变例
    for i:= n-2;i>=0;i--{
        for j :=0; j < len(triangle[i]);j++ {
        	// mini[j]使用一次,所以可以直接修改
            mini[j] = triangle[i][j] + min(mini[j],mini[j+1])
        }
    }
    return mini[0]
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!