动态规划题目千变万化,很多人刚入门时候都觉得非常难以理解,题目越做越挫,越做打击越大,看着别人的题解,心里只能默念一句卧槽,这都能写出状态方程!
走了那么多弯路,才发现问题所在,主要原因是因为基础的东西没掌握好,力扣上很多题目都是从这些基础的套路演变出来的,把基础问题的状态方程掌握和理解好,自己自然也就能写出其他题目的状态方程了。
所谓一生二,二生三,三生万物,把这一、二彻底弄懂了,其他花里胡哨的也自然就迎刃而解了。
如果能按照下面的专题刷,先读懂例题,再把本文给出的leetcode的题目刷一遍,都是一样的框架(套路),保证您对动态规划的理解上一个新的台阶。
动态规划是运筹学里的一个分支, 常常用一个数来表示一个集合, 如数字三角形模型第一个题, dp[i][j]表示为所有从点(0,0)走到点(i,j)的所有合法路径, 由于答案只要最小值, 所以dp[i][j]只保存最小值, 理解好这一点,至关重要。
一、数字三角形模型
例题:给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
解题思路:假设矩阵m的大小为M*N,行数为M,列数为N。生成大小和m一样的矩阵dp,行数为M,列数为N。
dp[i][j]的值表示从左上角,也就是(0,0)位置,走的(i,j)位置的最小路径和。
base case:如下图所示,第一行只能有向右走,第一列只能向下走,所以分别就是行的和and列的和。
leetcode题目:
64 最小路径和(本题)
120 三角形最小路径和
题解: https://lee