B4451 [GESP202512 四级] 建造

📅 发布时间:2026/7/13 9:02:48 👁️ 浏览次数:
B4451 [GESP202512 四级] 建造
前言这题说是枚举还要优化题目来源B4451 [GESP202512 四级] 建造 - 洛谷题目描述小 A 有一张 M 行 N 列的地形图其中第 i 行第 j 列的数字 aij​ 代表坐标 (i,j) 的海拔高度。停机坪为一个 3×3 的区域且内部所有 9 个点的最大高度和最小高度之差不超过 H。小 A 想请你计算出在所有适合建造停机坪的区域中区域内部 9 个点海拔之和最大是多少。输入格式第一行三个正整数 M,N,H含义如题面所示。之后 M 行第 i 行包含 N 个整数 ai1​,ai2​,…,aiN​代表坐标 (i,j) 的高度。数据保证总存在一个适合建造停机坪的区域。输出格式输出一行代表最大的海拔之和。输入输出样例输入 #1复制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输出 #1复制40说明/提示数据范围对于所有测试点保证 1≤M,N≤1≤H,aij​≤。分析范围小于1e3所以时间复杂度应为O()#include bits/stdc.h using namespace std; const int maxn1e35; int a[maxn][maxn]; int b[maxn][maxn];//3*3范围内最小数 int c[maxn][maxn];//3*3范围内最大数 int d[maxn][maxn];//3*3范围内数之和 int main() { int n,m,h; cinnmh; for(int i0; in; i) { for(int j0; jm; j) { cina[i][j]; b[i][j]max(b[i][j],a[i][j]); b[i1][j]max(b[i1][j],a[i][j]); b[i2][j]max(b[i2][j],a[i][j]); b[i][j1]max(b[i][j1],a[i][j]); b[i][j2]max(b[i][j2],a[i][j]); b[i1][j1]max(b[i1][j1],a[i][j]); b[i1][j2]max(b[i1][j2],a[i][j]); b[i2][j1]max(b[i2][j1],a[i][j]); b[i2][j2]max(b[i2][j2],a[i][j]); if(c[i][j]) c[i][j]min(c[i][j],a[i][j]); if(!c[i][j]) c[i][j]a[i][j]; if(c[i1][j]) c[i1][j]min(c[i1][j],a[i][j]); if(!c[i1][j]) c[i1][j]a[i][j]; if(c[i2][j]) c[i2][j]min(c[i2][j],a[i][j]); if(!c[i2][j]) c[i2][j]a[i][j]; if(c[i][j1]) c[i][j1]min(c[i][j1],a[i][j]); if(!c[i][j1]) c[i][j1]a[i][j]; if(c[i][j2]) c[i][j2]min(c[i][j2],a[i][j]); if(!c[i][j2]) c[i][j2]a[i][j2]; if(c[i1][j1]) c[i1][j1]min(c[i1][j1],a[i][j]); if(!c[i1][j1]) c[i1][j1]a[i][j]; if(c[i1][j2]) c[i1][j2]min(c[i1][j2],a[i][j]); if(!c[i1][j2]) c[i1][j2]a[i][j]; if(c[i2][j1]) c[i2][j1]min(c[i2][j1],a[i][j]); if(!c[i2][j1]) c[i2][j1]a[i][j]; if(c[i2][j2]) c[i2][j2]min(c[i2][j2],a[i][j]); if(!c[i2][j2]) c[i2][j2]a[i][j]; d[i][j]a[i][j]; d[i1][j]a[i][j]; d[i2][j]a[i][j]; d[i][j1]a[i][j]; d[i][j2]a[i][j]; d[i1][j1]a[i][j]; d[i1][j2]a[i][j]; d[i2][j1]a[i][j]; d[i2][j2]a[i][j]; } } int g0; for(int i2; in; i) { for(int j2; jm; j) { if(b[i][j]-c[i][j]h) { gmax(g,d[i][j]); } } } coutg; return 0; }