1. 程式人生 > >圖像壓縮存儲

圖像壓縮存儲

turn 一行 log 存儲 space str 數組 efi 時間

描述:以二維數組表示圖像,其值只有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的話是要超時的。。。

圖像壓縮存儲