每件商品最多买一件。购物原价每满 200 减 20;若所选商品包含至少 3 个不同类别,则改为每满 200 减 30,两种优惠不叠加。给定预算,求折后价不超过预算时的最大满意度总和。
第一行输入预算,第二行输入商品数 n ,随后 n 行输入唯一编号、类别、价格、满意度。 保证预算在 [10,1000] , 1≤ n≤20 ,类别在 [1,10] ,价格在 [1,200] ,满意度在 [1,240] 。
输出最大满意度总和。
100 3 10001 1 100 90 10002 2 100 100 10003 3 100 110
110
200 4 10001 1 200 200 10002 2 10 10 10003 3 10 10 10004 3 10 10
230
考点:穷举
数据规模 n ≤ 20 | 限制 2 秒 / 256MB | 标准输入输出
推荐方向:穷举
本题切入点
n≤20,商品选/不选共 2²⁰ 种组合,直接枚举子集:算原价、按所选是否含 ≥3 个不同类别选满减规则(每满 200 减 20 或减 30),在折后价 ≤ 预算中取最大满意度。
把候选答案空间全部列出来逐一检验,靠数据范围小来兜底。
思路框架(穷举 通法 · 非本题专属)
实现要点:多重循环是最直接的写法;枚举组合时可用递归 + 回溯,或用位掩码代表子集。
复杂度:时间 O(候选数 × 单次校验代价) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1:输入 100 / 3 / 10001 1 100 90 / 10002 2 100 100 / 10003 3 100 110 → 输出 110
预算只能购买其中一件。
样例 2:输入 200 / 4 / 10001 1 200 200 / 10002 2 10 10 / 10003 3 10 10 / 10004 3 10 10 → 输出 230
四件原价 230,三个类别触发减 30,折后正好 200。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-07月24号开发岗。