这个maxn再多一个0就不行了会提示Error: value of 0000000950a9a44b too large for field of 4 bytes at 000000000000008b
emmm不知道测试会怎么样,刚开始还用两个矩阵,然后发现第二个矩阵多余
原题:
第三题:图像压缩存储
描述:以二维数组表示图像,其值只有0、1两种,寻找两幅图像中最大的相同部分
输入:第一行输入一个n,接下来的2n行输入两个n * n数组,寻找一个最大的m * m子区域,使得两个数组在该子区域完全相同
输出:输出上诉m
样例输入:
4
1 1 1 1
1 1 1 0
1 1 1 0
1 1 1 1
0 1 1 1
0 1 1 1
0 1 1 1
0 1 1 0
样例输出:
2
解释:上诉两个4阶数组中的一个2阶子区域(第1、2行,第2、3列完全相同)
#include<iostream>
using namespace std;
const int maxn=10010;
int G[maxn][maxn];
int n;
bool same[maxn][maxn]={false};
int look(int x,int y){
int m=1;
for(int a=1;a<n-x;a++){
bool flag=true;
for(int i=x;i<=x+a;i++){
for(int j=y;j<=y+a;j++){
if(!same[i][j]){
flag=false;
break;
}
}
}if(flag) m++;
}return m;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&G[i][j]);
}
}for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int d;
scanf("%d",&d);
if(G[i][j]==d) same[i][j]=true;
}
}
int num=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(same[i][j]){
num=max(num,look(i,j));
}
}
}cout<<num<<endl;
return 0;
}