思路:
暴力枚举,循环,用x记录a数组右下角的部分,check函数负责检验,取最大值。```
#include<bits/stdc++.h>
using namespace std;
#define FO(i,a,b) for(int i=a;i<=b;i++)
int an,am,bn,bm,a[55][55],b[55][55],ans,x[55][55];
void solve(int ai,int aj){FO(i,ai,an)FO(j,aj,am)x[i-ai+1][j-aj+1]=a[i][j];}
bool check(int n,int m){FO(i,1,n)FO(j,1,m)if(x[i][j]!=b[i][j])return 0;return 1;}
void solve(int ai,int aj,int bi,int bj){
if(an-ai+1!=bi||am-aj+1!=bj)return;
solve(ai,aj);
if(check(bi,bj))ans=max(ans,bi*bj);
}
signed main(){
cin>>an>>am;
FO(i,1,an)FO(j,1,am)cin>>a[i][j];
cin>>bn>>bm;
FO(i,1,bn)FO(j,1,bm)cin>>b[i][j];
FO(ai,1,an)FO(aj,1,am)FO(bi,1,bn)FO(bj,1,bm)solve(ai,aj,bi,bj);
cout<<ans;
return 0;
}