本文共 1139 字,大约阅读时间需要 3 分钟。
关于动态规划法的解释, 大多都是基于背包问题的, 但背包问题背负了很多算法的解释工作,经常让初学者混淆,刚刚刷leetcode的时候,发现了一个很不错的关于动态规划算法的例题,特来分享一下!
动态规划法的优势在于, 前面N-1步保持了"很多"状态, 当走出第N-1步的时候后, 可以基于保存的状态直接得出"很多新的"状态, 然后从新状态中得到最优解.
class Solution: def minimumTotal(self, triangle): """ :type triangle: List[List[int]] :rtype: int """ for m in range(len(triangle)-1)[::-1]: # m 为 主数组索引 if (m == len(triangle)-1): pass # n 为当前元素索引 for n in range(len(triangle[m])): triangle[m][n] = min(triangle[m][n]+triangle[m+1][n], triangle[m][n]+triangle[m+1][n+1]) print("第",m,"行", "第",n,"个元素当前值为", triangle[m][n]) return triangle[0][0] def main(): result = Solution().minimumTotal([[2], [3, 4], [6, 5, 7], [4, 1, 8, 3]]) print("最短路径为==>",result) if __name__ == '__main__': main()
转载地址:http://zixqa.baihongyu.com/