思路:
先n^3预处理出每个点能到达的(1010串)最上面的行下标。
然后再n^3暴力一下,对于每个点,往左走看能走到哪,边走边更新面积。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int N=;
const int INF=0x3f3f3f3f;
int mp[N][N];
int suf[N][N];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int T;
int n;
cin>>T;
while(T--)
{
cin>>n;
mem(suf,INF);
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
cin>>mp[i][j],suf[i][j]=i;
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
for(int k=i+;k<n;k++)
{
if(mp[k][j]!=mp[k-][j])suf[k][j]=min(suf[k][j],i);
else break;
}
}
}
int ans=;
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
int t=suf[i][j];
ans=max(ans,i-t+);
for(int k=j-;k>=;k--)
{
t=max(t,suf[i][k]);
if(mp[i][k]!=mp[i][k+])
{
ans=max(ans,(j-k+)*(i-t+));
}
else break;
}
}
}
cout<<ans<<endl;
}
return ;
}