牛牛寝室有四人,他们打算用一个音响播放自己喜欢的曲子。 但是四人的喜好各不相同,他们每个人选取了自己最喜欢的n首曲子。 也就是一共有4n首曲子,第i首的长度为 a_i 。 但是他们不能容忍播放别人的曲子的时间比他们长很多,牛牛可以从这些曲子中删掉一些,使得每个人的播放总长大致相等。 牛牛想知道在每个人都至少都播放1首歌的情况下,播放最长时间和播放最短时间的差距最小是多少。
第一行输入一个整数n,表示每个人都选择了n首曲子。 随后4行,每行n个整数,分别表示第每名室友喜欢的歌曲的时间长度。 对于 30\% 的数据有 n≤ 3 对于 100\% 的数据有 1≤ n≤ 10, 100≤ a_i ≤ 600
一行输出一个整数。
3 240 300 360 600 200 200 300 400 500 600 600 600
100
考点:穷举
数据规模 n ≤ 10 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:穷举
本题切入点
n≤10,四个人各自选一个子集,总状态数 2^40 过大,但可以按「每人总长」做了值域 DP/枚举,注意每人至少 1 首。
把候选答案空间全部列出来逐一检验,靠数据范围小来兜底。
思路框架(穷举 通法 · 非本题专属)
实现要点:多重循环是最直接的写法;枚举组合时可用递归 + 回溯,或用位掩码代表子集。
复杂度:时间 O(候选数 × 单次校验代价) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1:输入 3 / 240 300 360 / 600 200 200 / 300 400 500 / 600 600 600 → 输出 100
分别选用{1,3},{1},{3},{1}时,差距为100。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:贝壳找房2023届校招算法卷1。