jxcakakTLE70分求调

题目描述

给定一个wh的矩形,每个方格内有数,求一个nn的正方形,使得正方形内部最小值加最大值的值最小。

你只需要输出这个数值

输入格式

第一行三个正整数w,h,n w,h <=2000,n <=min(w,h)

接下来w行每行h个数描述这个矩阵,保证矩阵中所有数非负并且不超过1e9

输出格式

一个整数.

样例输入

5 4 2 1 2 5 6 0 17 16 0 16 17 2 1 2 10 2 1 1 2 2 2

样例输出

3

约定

对于10%的数据,max(w,h)<=10

对于20%的数据,max(w,h)<=100

对于40%的数据,max(w,h)<=500

对于60%的数据,max(w,h)<=1000

对于100%的数据,max(w,h)<=2000
TLE70分代码

#include<bits/stdc++.h>
using namespace std;
int w,h,n,ans=INT_MAX,a[20005][20005];
int check(int x,int y){
	int minn=INT_MAX,maxx=INT_MIN;
    for(int i=x-n+1;i<=x;i++){
    	for(int j=y-n+1;j<=y;j++){
    		maxx=max(maxx,a[i][j]);
    		minn=min(minn,a[i][j]);
		}
	}
	return maxx+minn;
}
int main(){
    cin>>w>>h>>n;
    for(int i=1;i<=w;i++){
    	for(int j=1;j<=h;j++){
    		cin>>a[i][j]; 
		}
	}
    for(int i=n;i<=w;i++){
    	for(int j=n;j<=h;j++){
    		ans=min(ans,check(i,j));
		}
	}
	cout<<ans<<endl;
	return 0;
}