本章纯属套路,零基础估计有点看不懂
求解动态规划最重要的一步就是定义dp[]这样的数组是什么意思,一定要搞清楚,这时解题目的关键
第一 动态规划要想求解最后一个状态,肯定最外面得来个整个数组的for循环,这样依次根据每个状态之间的关系,通过这个for循环就能够得出最终状态的值,这里的for循环肯定是从左到右的,因为这种类型的动态规划是求解最后一个状态
第二 for循环中每个状态的求解,如果要依赖于这个状态之前的所有状态的话,那么里面的每个状态同样也得来个for循环,这种情况就有点复杂了
第三 并不是所有的动态规划都是求解数组中最后的一个状态,这时有可能是根据数组中的所有状态来求解一个其中的一个最值。这时如果你顺着for循环来依次看每个状态之间的关系不好看,这时你就可以逆着来for循环,这样逆着有可能会更好的求出每个状态之间的关系。这时就可以根据逆着来各个之间的关系来把中间的状态求解出来
第四动态规划中二维数组,其实表示着两层意思在一个dp中,分别是横坐标和纵坐标,横坐标表示着一层意思。纵坐标也表示着一层意思。通常纵坐标表示的是"分类"。横坐标表示当前的位置。
第五矩阵情况一般都是用二维dp,横坐标为第一维,纵坐标为第二维度,并且通常还有一个方向数组。
第六对于那种你分不清楚多少组的问题,有可能要分很多组,反正你就是搞不清楚到底要分多少组的问题。你就别去纠结要分多少组了,你就直接定义一个dp[i] 默认已经分好了。