健美大咖想要维持身材,每天需要摄入 n 种营养物质,每种营养物质摄入的最低量为 a[i] 。但餐厅每天只能提供 m 份套餐,每份套餐包含各种营养物质的含量为 b[i] 。现在想知道,健美大咖最少需要购买多少份套餐,并请你给出具体购买方案?
第一行一个正整数,需要的营养物质种类数 n ; 第二行 n 个正整数,每种营养物质需要摄入的最低量 a[i] ; 第三行一个正整数m,餐厅提供的套餐份数 m ; 接下来 m 行,每行 n 个正整数,表示该套餐内每种营养物质量 b[i] 。
第一行一个正整数,最少需要的购买的套餐份数 ans ; 第二行 ans 个正整数, 具体购买方案,即从小到大顺序排列的套餐编号。 (保证有解,若有多组解,输出字典序最小的一个)
4 10 20 30 40 3 1 5 1 10 20 38 20 30 20 15 37 39
2 1 3
考点:穷举
限制 1 秒 / 256MB | 标准输入输出
推荐方向:穷举
本题切入点
m 份套餐里挑最少几份覆盖全部营养需求,属于集合覆盖问题;范围小时可枚举子集并取字典序最小的最优解。
把候选答案空间全部列出来逐一检验,靠数据范围小来兜底。
思路框架(穷举 通法 · 非本题专属)
实现要点:多重循环是最直接的写法;枚举组合时可用递归 + 回溯,或用位掩码代表子集。
复杂度:时间 O(候选数 × 单次校验代价) | 空间 O(1)
该范式的通法易错点
样例 1:输入 4 / 10 20 30 40 / 3 / 1 5 1 10 / 20 38 20 30 / 20 15 37 39 → 输出 2 / 1 3
购买两份套餐即套餐1和套餐3,则1+20>=10,5+15>=20,1+37>=30,10+39>=40,且[1,3]时所有方案里字典序最小的,满足题意要求。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:【2023】贝壳找房春招Java工程师笔试卷1;【2023】贝壳找房春招C++工程师笔试卷1;【2023】贝壳找房春招数据挖掘/机器学习工程师笔试卷1 等。