华为 · 贪心 · 算法编程题
华为 贪心 时限 2 秒 / 256 MB

题目描述

小红正在调试一个智能学习助手。这个系统会先从知识库里召回一批候选示例,再从中挑出若干条最适合展示给用户的结果。
如果系统只按“和当前问题有多相关”来排序,往往会返回许多内容非常接近的示例。为了让结果既相关又有区分度,小红决定使用最大边际相关性(MMR)策略做二次重排。
现在一共有 N 个候选文档。第 i 个文档有一个互不相同的文档编号 ID,还给出了它和当前查询的相关性分数 rel[i]。此外,系统还知道任意两个候选文档之间的相似度 sim[i][j]。
小红会维护一个已经选中的文档集合 S,初始时它为空。随后重复执行 K 轮,每一轮都要在还没被选过的文档里,计算当前的 MMR 分数:
MMR(i) = λ * rel[i] - (1 - λ) * max(sim[i][j]),其中 j 来自集合 S。
如果当前 S 为空,那么上式中的最大相似度部分按 0 处理。
每一轮都选出当前 MMR 分数最高的那个文档加入集合 S,并把它的文档编号按顺序记入答案中。如果有多个文档在这一轮的 MMR 分数完全相同,则选择文档编号较小的那个。
请你输出这 K 轮依次选中的文档编号。

输入输出

输入描述
第一行一个整数 N,表示候选文档数量,满足 1
接下来 N 行,每行包含一个浮点数 rel 和一个整数 ID,表示按输入顺序编号的第 i 个候选文档的相关性分数和文档编号。所有文档编号互不相同,且在 1 到 10^9 之间。相关性分数在 [0,1] 范围内。
接下来 N 行,每行包含 N 个浮点数,构成相似度矩阵 sim。其中第 i 行第 j 列表示文档 i 和文档 j 的相似度。题目保证矩阵对称,且 sim[i][i] = 1.00。所有相似度都在 [0,1] 范围内,并精确到小数点后两位。
最后一行包含一个浮点数 λ 和一个整数 K,其中 0 <= λ <= 1,0 <= K <= N。
输出描述
输出一行,包含 K 个整数,表示按选择顺序得到的文档编号,编号之间用空格分隔。
如果 K = 0,输出一个空行即可。

样例共 1 组

样例 1 · 第一轮集合为空,只看 0.6 * rel,文档 11 最高。第二轮开始要扣掉与已选文档的最大相似度,文档 30 与 11 的相似度更低,因此先被选出。第三轮继续比较后,得到顺序 11 30 7。
输入
4
0.80 11
0.75 7
0.60 30
0.50 25
1.00 0.90 0.20 0.10
0.90 1.00 0.30 0.20
0.20 0.30 1.00 0.80
0.10 0.20 0.80 1.00
0.6 3
输出
11 30 7

算法解析依据充分

考点:贪心

限制 2 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:2 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:贪心

本题切入点

MMR 每轮贪心取当前分数最高的文档:维护已选集合 S,每轮对未选文档算 λ·rel[i] − (1−λ)·max_{j∈S} sim[i][j](S 为空时相似度项取 0),同分取编号较小者。

每一步都取当前最优,靠问题性质保证局部最优能拼成全局最优。

思路框架(贪心 通法 · 非本题专属)

  1. 找出「局部最优怎么选」(往往与排序后的顺序有关)。
  2. 论证(或理性相信)这个贪心策略不会被反例击破:常用交换论证法。
  3. 按策略一次扫描(通常要先排序)得到答案。
  4. 若贪心无法证明,考虑改用 DP(贪心的反例通常来自「当前最优影响后续选择」)。

实现要点:贪心题关键在于排序规则:按什么关键字排序决定了策略是否正确。

复杂度:时间 O(n log n)(含排序) | 空间 O(1) ~ O(n)

该范式的通法易错点

  • 策略不成立却当成贪心做(典型错因)。
  • 排序关键字选错,或相同关键字时的次级规则没考虑。

样例解读

样例 1:输入 4 / 0.80 11 / 0.75 7 / 0.60 30 / 0.50 25 / 1.00 0.90 0.20 0.10 / 0.90 1.00 0.30 0.20 / 0.20 0.30 1.0 → 输出 11 30 7

第一轮集合为空,只看 0.6 * rel,文档 11 最高。第二轮开始要扣掉与已选文档的最大相似度,文档 30 与 11 的相似度更低,因此先被选出。第三轮继续比较后,得到顺序 11 30 7。

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

本题来源:2026年-华为-04月23日留学生AI岗。

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