测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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;
上一题 下一题