题解:
一个类似尺取法的算法
代码:
#include<cstdio> #include<algorithm> using namespace std; const int N=1005; int T,n,m,up[N][N],left[N][N],right[N][N]; char s[N][N]; int main() { scanf("%d",&T); while (T--) { scanf("%d%d",&m,&n); for (int i=0;i<m;i++) for (int j=0;j<n;j++) for (s[i][j]=getchar();s[i][j]!='F'&&s[i][j]!='R';s[i][j]=getchar()); int ans=0; for (int i=0;i<m;i++) { int l=-1,r=n; for (int j=0;j<n;j++) { if (s[i][j]=='R') { up[i][j]=left[i][j]=0; l=j; } else { up[i][j]=i==0?1:up[i-1][j]+1; left[i][j]=i==0?l+1:max(left[i-1][j],l+1); } } for (int j=n-1;j>=0;j--) if (s[i][j]=='R') { right[i][j]=n; r=j; } else { right[i][j]=i==0?r-1:min(right[i-1][j],r-1); ans=max(ans,up[i][j]*(right[i][j]-left[i][j]+1)); } } printf("%d ",ans*3); } }