首先,传送门:https://www.luogu.com.cn/problem/P1169
再说题目大意:在图里找到最大矩阵和最大正方形且都是1或0(大概懂就好了,我也说不清)
emmm 两模板题串一块了
#include <bits/stdc++.h> using namespace std; int a[2005][2005],l[2005][2005],r[2005][2005],up[2005][2005]; int main() { int n,m,ans1=0,ans2=0; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>a[i][j]; l[i][j]=r[i][j]=j; up[i][j]=1; } for(int i=1;i<=n;i++) for(int j=2;j<=m;j++) if(a[i][j]!=a[i][j-1]) l[i][j]=l[i][j-1]; for(int i=1;i<=n;i++) for(int j=m-1;j>0;j--) if(a[i][j]!=a[i][j+1]) r[i][j]=r[i][j+1]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ if(i>1 && a[i][j]!=a[i-1][j]){l[i][j]=max(l[i][j],l[i-1][j]); r[i][j]=min(r[i][j],r[i-1][j]); up[i][j]=up[i-1][j]+1;} int tot=r[i][j]-l[i][j]+1; int sum=min(tot,up[i][j]); ans1=max(ans1,sum*sum);//正方形 ans2=max(ans2,up[i][j]*tot);//矩形 } cout<<ans1<<endl<<ans2; return 0; }