https://www.luogu.org/problemnew/show/P1169
第一次听说到这种dp的名称叫做悬线法,听起来好厉害
题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[2000][2000][2]维护这个位置向上向左扩充的矩阵最大长度之后n²扫一遍,但是写起来发现并不能有效的扩充,也就是状态转移方程很难写出来。
后来发现有一种奥妙重重的方法叫做悬线法,把我原本向左向上扩充的过程改为记录每一个点向左向右向上的最大长度,这些状态很显然可以通过扫一遍的方法求出来,然后对于每一个点,宽度就是l - r + 1,显然对于同一个合法区间内的点,他的left和right是相同的。
用自上而下的方法递推出到N这一行时这个点向上扩充的最大长度之后递推即可。
悬线法对一类限制下求子矩阵的问题很好用。
#include