最佳任务统筹
2026 华为OD机试真题 6月7日华为OD上机新系统考试真题 200 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
某部门的项目经理,近期手头有 n 个开发任务必须全部完成(不可并行,必须顺序执行)。每个任务 i 有三个属性:
- 持续时间 duration[i]:执行该任务需要的时间;
- 截止时间 deadline[i]:任务必须在某个时刻前完成才能获得收益;
- 收益 profit[i]:若在截止时间前完成,可获得的收益。
任务从时刻 0 开始依次执行。若任务 i 的完成时刻(即开始时刻 + duration[i])≤deadline[i],则你获得 profit[i];否则该任务收益为 0(任务仍要执行)。他可以任意决定任务的执行顺序,目标是最大化所有任务的总收益。请帮他计算最大可能收益。
2026 华为OD机试真题 6月7日华为OD上机新系统考试真题 200 分题型
输入描述
共有 4 个输入参数:
- n:任务数量(1≤n≤20),编号 0 到 n-1。
- duration:长度为 n 的正整数数组,duration[i]≤1000。
- deadline:长度为 n 的正整数数组,deadline[i]≤1000。
- profit:长度为 n 的正整数数组,profit[i]≤1000。
输出描述
输出一个整数,表示能获得的最大总收益。
示例1
输入
3,[2,1,3],[3,2,5],[10,20,30]
输出
50
说明
说明
按顺序任务 2 → 任务 3 → 任务 1 执行:
- 任务 2:时刻 0 开始,持续 1,完成于时刻 1 ≤ 2,收益 20;
- 任务 3:时刻 1开始,持续 3,完成于时刻 4 ≤ 5,收益 30;
- 任务 1:时刻 4 开始,持续 2,完成于时刻 6 > 3,收益 0。 总收益 = 20+30+0=50,此为最大。
示例2
输入
4,[1,2,3,4],[1,3,6,10],[100,200,300,400]
输出
1000
说明
说明
所有任务按原顺序执行均可满足截止时间,总收益为 100+200+300+400=1000。
示例3
输入
2,[5,5],[4,10],[100,200]
输出
200
说明
说明
- 第一个任务持续时间 5,截止时间 4,无论如何排序都会超时,收益为 0。
- 第二个任务无论何时执行均可在截止前完成,收益 200。 故最大收益为 200。
解题思路
本题是一个 任务调度优化 问题,要求在任务必须顺序执行的前提下,通过选择最优执行顺序来最大化总收益。
状态压缩 DP 思路:
- 使用二进制 mask 表示已完成的任务集合
dp[mask] = (最大收益, 达成该收益的最小完成时刻)- 对于每个状态,枚举最后执行的任务 j,计算新的收益和时间
- 若
完成时刻 <= 截止时间,则获得对应收益;否则收益为 0 - 状态转移时优先选择收益更大的方案,收益相同时选择完成时刻更小的
关键点:
- n ≤ 20,使用 2^n 状态压缩 DP
- 每个状态需要记录(收益, 完成时刻)两个值
- 收益相同时保留最小完成时刻,确保后续任务有更多时间
复杂度分析
- 时间复杂度:O(n² × 2^n),枚举所有状态及转移
- 空间复杂度:O(2^n),存
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/682
文章版权归作者所有,未经允许请勿转载。
THE END