算法浅谈之DP悬线法
悬线法
- 用途
解决给定矩阵中满足条件的最大子矩阵
- 做法
用一条线(横竖貌似都行)左右移动直到不满足约束条件或者到达边界
- 定义
\(left[i][j]\):代表从\((i,j)\)能到达的最左位置
\(right[i][j]\):代表从\((i,j)\)能到达的最右位置
\(up[i][j]\):代表从\((i,j)\)向上扩展最长长度.
- 状态转移
\[left[i][j]=max(left[i][j],left[i-1][j])
\]
\[right[i][j]=min(right[i][j],right[i-1][j])
\]
- 至于为什么递推公式中考虑上一层的情况?
是因为\(up\)数组的定义,\(up\)数组代表向上扩展最长长度, 所以需要考虑上一层的情况.