贝壳找房 · 穷举 · 算法编程题
贝壳找房 穷举 n ≤ 10 时限 1 秒 / 256 MB

题目描述

牛牛寝室有四人,他们打算用一个音响播放自己喜欢的曲子。
但是四人的喜好各不相同,他们每个人选取了自己最喜欢的n首曲子。
也就是一共有4n首曲子,第i首的长度为 a_i 。
但是他们不能容忍播放别人的曲子的时间比他们长很多,牛牛可以从这些曲子中删掉一些,使得每个人的播放总长大致相等。
牛牛想知道在每个人都至少都播放1首歌的情况下,播放最长时间和播放最短时间的差距最小是多少。

输入输出

输入描述
第一行输入一个整数n,表示每个人都选择了n首曲子。
随后4行,每行n个整数,分别表示第每名室友喜欢的歌曲的时间长度。
对于 30\% 的数据有 n≤ 3
对于 100\% 的数据有 1≤ n≤ 10, 100≤ a_i ≤ 600
输出描述
一行输出一个整数。

样例共 1 组

样例 1 · 分别选用{1,3},{1},{3},{1}时,差距为100。
输入
3
240 300 360
600 200 200
300 400 500
600 600 600
输出
100

算法解析依据充分

考点:穷举

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

题目画像

  • 数据规模:n ≤ 10
  • 元素值域:a_i ≤ 600(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:穷举

本题切入点

n≤10,四个人各自选一个子集,总状态数 2^40 过大,但可以按「每人总长」做了值域 DP/枚举,注意每人至少 1 首。

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

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

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

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

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

该范式的通法易错点

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

对照本题

  • 数据规模 n ≤ 10,允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 元素值域最大到 600 —— 求和 / 相乘时记得开 64 位整数。

样例解读

样例 1:输入 3 / 240 300 360 / 600 200 200 / 300 400 500 / 600 600 600 → 输出 100

分别选用{1,3},{1},{3},{1}时,差距为100。

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

本题来源:贝壳找房2023届校招算法卷1。

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