华为 · 穷举 · 算法编程题
华为 穷举 n ≤ 600 时限 3 秒 / 256 MB

题目描述

在一个 n × m 的城市网格中,需要部署无线网络信号塔来为居民区提供服务。网格中每个单元格的属性由一个整数值 A[i][j] 定义:
1. 如果 A[i][j] > 0 ,表示该单元格是一个居民区,其数据需求为 A[i][j] 。
2. 如果 A[i][j] < 0 ,表示该单元格可以建立一个信号塔,其信号半径为 -A[i][j] 。
3. 如果 A[i][j] = 0 ,表示该单元格是空地。
一个位于 (x_1, y_1) 的信号塔,其信号半径为 R (即其原始值为 -R ),能够覆盖另一个位于 (x_2, y_2) 的居民区,当且仅当它们的欧几里得距离满足以下条件:
(x_1 - x_2)^2 + (y_1 - y_2)^2 ≤ R^2
- 未被任何信号塔覆盖的居民区,其数据服务价值为 0。
- 如果一个居民区被 k 个信号塔同时覆盖,由于信号干扰,其有效数据服务价值将从 A[i][j] 下降为 ⌊ (A[i][j]/k) ⌋ 。
你需要制定一个信号塔激活方案,选择激活哪些信号塔,以最大化所有居民区的总有效数据服务价值。请计算这个最大总价值,以及在达到最大总价值时,所需激活的最少信号塔数量。

输入输出

输入描述
第一行输入两个整数 n 和 m ( 1 ≤ n, m ≤ 600 ),代表城市网格的尺寸。
接下来 n 行,每行包含 m 个整数,代表网格单元格的属性值 A[i][j] ( -800 ≤ A[i][j] ≤ 1000 )。
数据保证信号塔的总数(即 A[i][j] < 0 的单元格数量)不超过 11 个。
输出描述
输出一行,包含两个用空格隔开的整数,分别代表:
1. 可以实现的最大总数据服务价值。
2. 在实现最大价值的前提下,所需激活的最少信号塔数量。

样例共 1 组

样例 1
输入
12 10
0 500 0 0 0 0 0 0 0 0
73 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
-401 0 0 0 0 0 -431 0 0 0
381 0 0 0 0 0 0 0 66 0
0 269 0 0 -783 0 0 0 0 0
0 0 0 0 0 680 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 289 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 804 0 0 0 0 0
0 0 0 0 0 0 0 -579 0 0
输出
3062 1

算法解析依据充分

考点:穷举

数据规模 n ≤ 600 | 限制 3 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 600,m ≤ 600
  • 元素值域:A[i][j] ≤ 1e3(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:3 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:穷举

本题切入点

信号塔总数 ≤11,直接枚举激活哪些塔共 2¹¹ 种方案,对每个方案用预计算的覆盖关系 O(1) 汇总每一格的取值,再取「价值最大 → 激活塔数最少」。

把候选答案空间全部列出来逐一检验,靠数据范围小来兜底。

思路框架(穷举 通法 · 非本题专属)

  1. 确定枚举什么(下标区间 / 子集 / 数值)。
  2. 用一层或多层循环(或递归)生成所有候选。
  3. 对每个候选判断是否满足题目条件,满足就统计或更新最优值。
  4. 先按数据范围估算枚举量,确认不会超时。

实现要点:多重循环是最直接的写法;枚举组合时可用递归 + 回溯,或用位掩码代表子集。

复杂度:时间 O(候选数 × 单次校验代价) | 空间 O(1)

该范式的通法易错点

  • 没先估复杂度,枚举量超出时限(这是最常见的超时原因)。
  • 去重没做好,同一种方案被多次统计。

对照本题

  • 数据规模 n ≤ 600,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 元素值域最大到 1e3 —— 求和 / 相乘时记得开 64 位整数。

样例

样例 1

  • 输入:12 10 / 0 500 0 0 0 0 0 0 0 0 / 73 0 0 0 0 0 0 0 0 0 / 0 0 0 0 0 0 0 0 0 0 / -401 0 0 0 0 0 -431 0 0 0 / 381 0 0 0 0 0 0 0 66 0 / 0 269 0 0
  • 输出:3062 1

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2025年秋招-华为-9月28号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解