通过率 78% · 提交 396 · 通过 309
小慕正在筹备一场项目交流会,多个团队同时抵达会场。现场只有一辆接驳车,可以同时搭载多个团队。为了提高车辆的使用效率,小慕需要计算有多少种方案能将接驳车恰好坐满。请帮助小慕输出方案数量。 约束: 1. 每个团队必须整队上车,团队人数(团队数量小于30,每个团队人数小于30)不超过接驳车容量(接驳车容量小于100) 2. 接驳车必须恰好坐满
这类题属于华为 OD 机考真题方向中「200分 / 2024E」方向的高频题型,通常考察对「200分 / 2024E」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行代表团人数,英文逗号隔开,代表团数量小于30,每个代表团人数小于30
第二行汽车载客量,汽车容量小于100
坐满汽车的方案数量
如果无解输出0
示例 1
输入示例
5,4,2,3,2,4,9 10
输出示例
4
以下几种方式都可以坐满车,所以,优先接待输出为4 [2,3,5] [2,4,4] [2,3,5] [2,4,4]
示例 2
输入示例
1,2,3,4 3
输出示例
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
本题是计算方法数的 01背包 板子题。
思路展开 把每个团队的人数看成一件只能整取一次的物品,接驳车容量 max_num 就是背包容量,要统计的是恰好装满的方案数,这是计数型 01 背包。dp[i] 表示车上恰好坐 i 人的方案数,初始 dp[0] = 1,表示谁都不上车是一种基础状态。外层遍历每个团队的人数 num;内层从大到小枚举已有人数 pre(从 max_num - num 递减到 0),把 dp[pre] 累加到 dp[pre + num] 上,含义是:所有能凑出 pre 人的方案,再让当前团队整队上车,就都变成了凑出 pre + num 人的方案。内层上界取 max_num - num 是为了保证 pre + num 不超过车容量;逆序遍历是 01 背包计数的关键——保证累加 dp[pre + num] 时用到的 dp[pre] 还没有算入当前团队的贡献,否则同一团队会被重复上车。全部团队处理完后,dp[max_num] 即恰好坐满的方案数。 复杂度分析 设 k 为团队数量,C 为接驳车容量。
边界与注意事项
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
2
[1,2]或[3]
时间限制 1000 ms · 内存限制 128 MB