图像压缩存储

描述:以二维数组表示图像,其值只有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

#include <iostream>
#define N 100
using namespace std;

bool num(int b[N][N],int i,int j,int t){
    bool flag=true;
    for(int k=i;k<i+t;k++){
        for(int d=j;d<j+t;j++){
            if(b[k][d]==0){
                flag=false;
                break;
            }
        }
    }
    return flag;
}

int main()
{
    int n;
    scanf("%d",&n);
    int a[N][N];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        scanf("%d",&a[i][j]);
    int temp;
    for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                scanf("%d",&temp);
                a[i][j]=!(a[i][j]^temp);
                }
    }
    int t=n;
    bool tmp=true;
    while(tmp){
    for(int i=0;i<n-t;i++){
        for(int j=0;j<n-t;j++){
           if(num(a,i,j,t)){
            tmp=false;
            break;
           }
        }
    }
    t--;
    }

    printf("%d",t+1);
    return 0;
}

P.S. 我做是做出来了,但这个的时间复杂度。。。O(n^4),也可以看到,实在太大了,我估计要是跑oj的话是要超时的。。。

 

posted @ 2018-03-27 18:01  Shaw_喆宇  阅读(283)  评论(0编辑  收藏  举报