悬线法
1.悬线法用以解决子矩阵的问题。
2.悬线法的基本思路:
我们观察一个满足条件的极大子矩阵:
1 1 0 0 1
0 1 1 1 1
1 0 1 1 0
1 0 0 0 1
中的(3,2)到(4,3)的矩阵就是一个极大子矩阵。
可很容易想到,一个极大子矩阵,其上方必接一个障碍点或者是边界,所以,当一个矩阵的上边界尽可能大时,它就可能会成为一个极大子矩阵。
用数组l,r记录某点向左和向右能到达的最远点的纵坐标。 用数组up记录某点向上能到达的最远距离。
我们将一个点的对应矩阵定义为以这个点的向上能到达的最远距离为高,他所在的边为底,并向左右尽可能地延伸的矩阵。
由于我们说过,每一个极大子矩阵的上方都会对应一个障碍点,那么这个障碍点的正下方的子矩阵底上的那一点所对应的矩阵就是这个极大子矩阵。
即,若考虑了每一个点对应的矩阵,就不会漏掉任意一个极大子矩阵了。