时值中世纪,您是一位雄心勃勃的商人,计划在地中海的各大城市之间开展一系列贸易活动。您获得了一份航海图,上面标注了 n 条利润丰厚的贸易航线。每一条航线都连接着两个港口,有明确的出发和到达日期,并需要一支特定规模的商队来完成。您的目标是在有限的资源下,规划出最赚钱的贸易路线。 您有 n 个贸易机会可供选择。对于第 i 个贸易机会,您掌握以下信息: 出发时间 : startTime_i 到达时间 : endTime_i 所需商队规模 : effort_i 预期利润 : profit_i 您所能召集的最大商队规模为 maxEffort 。在任何时候,您都只能派遣一支商队,因此您不能同时进行时间上重叠的贸易活动。然而,如果一趟贸易在时间 X 结束,您可以立即开始一趟新的、在时间 X 出发的贸易。 您的任务是制定一份贸易计划,选择一部分贸易机会来执行,使得总利润最大化,同时确保任何时刻派遣的商队规模之和都不超过您的最大能力 maxEffort 。
输入包含 5 个参数,前四个是描述贸易机会的数组,第五个是您的最大商队规模。 1. 出发时间数组 ( startTime ) : 一个整数数组,表示每个贸易机会的出发时间。 2. 到达时间数组 ( endTime ) : 一个整数数组,表示每个贸易机会的到达时间。 3. 商队规模数组 ( effort ) : 一个整数数组,表示完成每个贸易机会所需的商队规模。 4. 利润数组 ( profit ) : 一个整数数组,表示完成每个贸易机会可获得的利润。 5. 最大商队规模 ( maxEffort ) : 一个整数,表示您能召集的最大商队规模。 约束条件 : 所有数组的长度 n 相等,且 1 ≤ n ≤ 2000 。 1 ≤ startTime_i < endTime_i ≤ 2000 。 1 ≤ effort_i, profit_i ≤ 10^9 。 1 ≤ maxEffort ≤ 1000 。 输入格式 : 输入共 5 行,每行代表一个参数。前 4 行的数组数据由空格分隔。
一个整数,代表您能获得的最大总利润。
2 4 7 6 8 11 20 20 20 30 90 30 40
90
考点:动态规划
数据规模 n ≤ 2000 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:动态规划
本题切入点
时间不重叠 + 总商队规模不超上限的最大利润:按结束时间排序后做 DP(状态含已用规模),即「区间调度 + 资源维度」的联合状态递推。
把问题拆成子问题,用状态表示「已处理到哪儿」,靠转移方程递推。
思路框架(动态规划 通法 · 非本题专属)
实现要点:一般是「先枚举阶段,再枚举状态,最后枚举决策」三层循环;空间大时可滚动数组优化。
复杂度:时间 O(状态数 × 转移代价) | 空间 O(状态数)
该范式的通法易错点
对照本题
样例 1
2 4 7 / 6 8 11 / 20 20 20 / 30 90 30 / 4090解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-华为-10月23号留学生开发岗。