在一个 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. 在实现最大价值的前提下,所需激活的最少信号塔数量。
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 | 标准输入输出
推荐方向:穷举
本题切入点
信号塔总数 ≤11,直接枚举激活哪些塔共 2¹¹ 种方案,对每个方案用预计算的覆盖关系 O(1) 汇总每一格的取值,再取「价值最大 → 激活塔数最少」。
把候选答案空间全部列出来逐一检验,靠数据范围小来兜底。
思路框架(穷举 通法 · 非本题专属)
实现要点:多重循环是最直接的写法;枚举组合时可用递归 + 回溯,或用位掩码代表子集。
复杂度:时间 O(候选数 × 单次校验代价) | 空间 O(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 3062 1解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-华为-9月28号开发岗。