A21964. 建造
填空题
较难
知识点
题目描述
建造
题目描述
小A有一张M行N列的地形图,其中第i行第j列的数字aij代表坐标(i,j)的海拔高度。
停机坪为一个3x3的区域且内部所有9个点的最大高度和最小高度之差不超过H。
小A想请你计算出,在所有适合建造停机坪的区域中,区域内部9个点海拔之和最大是多少。
输入格式
第一行三个正整数M,N,H,含义如题面所示。
之后M行,第i行包含N个整数ai1,ai2,...,aiN,代表坐标(i,j)的高度。
数据保证总存在一个适合建造停机坪的区域。
输出格式
输出一行,代表最大的海拔之和。
样例
输入样例
5 5 3
5 5 5 5 5
5 1 5 1 5
5 5 5 5 5
5 2 5 2 5
3 5 5 5 2输出样例
40数据范围
对于所有测试点,保证1≤M,N≤103,1≤H,aij≤105。
参考答案
#include <iostream>
using namespace std;
int a[1010][1010];
int main(){
int M, N, H;
cin >> M >> N >> H;
for (int i = 1; i <= M; ++i) {
for (int j = 1; j <= N; ++j) {
cin >> a[i][j];
}
}
int max_sum = 0;
for (int i = 1; i <= M - 2; ++i) {
for (int j = 1; j <= N - 2; ++j) {
int local_max = a[i][j], local_min = a[i][j], local_sum = 0;
for (int x = 0; x < 3; ++x) {
for (int y = 0; y < 3; ++y) {
int height = a[i + x][j + y];
local_sum += height;
if (height > local_max) local_max = height;
if (height < local_min) local_min = height;
}
}
if (local_max - local_min <= H) {
if (local_sum > max_sum) {
max_sum = local_sum;
}
}
}
}
cout << max_sum;
return 0;
上一题
下一题