题目:https://www.luogu.com.cn/problem/P4147
题意:给出一个矩阵,由 F , R F,R F,R构成,求由 F F F构成的最大子矩阵
题目:这道题很容易想到最大子矩阵,但这样复杂度是 n 3 n^3 n3,这道题显然不够(据说有dalao卡过去了)
- 这道题我们考虑悬线法,悬线法就是确定一条竖线,我们确定这条竖线的上边界,即矩阵边界或R点,然后这条竖线左右移动,找到左右边界,我们就求出了这条线的最大矩阵
- 我们预处理每个点的上边界和左右边界,一行一行枚举,求出每个点向上、向左右扩展的矩阵,取最大值就可以了
代码
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define pb push_back
#define MAXN 1010
using namespace std;
typedef long long ll;
typedef pair<int,int