先DP处理出每点向上最多扩展出的0的个数
再用二维单调栈处理最大矩形
其实就是对每一行跑一遍单调栈……
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
const int MAXN = 2000 + 50;
int map[MAXN][MAXN],f[MAXN][MAXN],dp[MAXN][MAXN];
int n,