本文借鉴了朋友的文章,做了一点润色。
文章链接:https://blog.csdn.net/qq_27070117/article/details/79819352
有一道算法题, 如下所示, 有一数字矩阵, 从左上走到右下, 只能向下或向右走, 求走到右下角所经过的数字的和的最大值以及经过的路径.
1 2 3 4
5 6 9 8
9 1 0 1
2 3 4 5
这道题就用到了动态规划算法, 那么什么是动态规划算法呢?我理解的是:“调动所有的群众数字,参与到规划方案中”。所有的数字都是要进行相同的运动,最后根据算法中的筛选条件,进行取舍,抽象概括就是动态规划了。
解这道动态规划题的核心就是要画出对应的平面直角坐标系,正所谓数无形时少直觉,形少数时难入微,有了坐标系,可以更好更直观的给出解决方法。图中的每个点都要记住以下几个值,该点的坐标,值,和到该点的最大路径权重值的点。这是非常重要的。我们通过遍历,调动每一个群众数字参与运算,每个数字都记录了到达它的上一个节点。这样就像一条链表一样串起来了一条路径了。获取每一个节点,将都能得到这个节点的路径,最大最小,根据题目变化。这也从另外一个角度说出了动态路径规划的缺点。调动性太强了,一点事情就要所有人都参与,时间复杂度和空间复杂度都太高。
聊完了思想