华为 · 动态规划 · 算法编程题
华为 动态规划 时限 1 秒 / 256 MB

题目描述

某物流公司需要为一条运输线路上的多个中转段选择运输方案。整条线路由若干个中转段组成,每个中转段可以选择不同的运输方式(如空运、陆运等),不同方式的运费和延误风险各不相同。
公司的目标是在保证总延误风险不超过给定阈值的前提下,使得整条线路的总运费最低。
具体条件如下:每个中转段在不同运输方式下有各自的延误风险值(浮点数)和运费(浮点数)。每个中转段必须且只能选择一种运输方式。所有中转段的延误风险之和不能超过阈值 T。
请设计算法,为每个中转段选择最优的运输方式,使得总运费最小且满足总延误风险不超过 T。

输入输出

输入描述
第一行:整数 L(中转段数量)和浮点数 T(延误风险阈值)。
接下来 L 行,每行描述一个中转段的可选方案:先是一个整数 K(该中转段可选的运输方式数量),随后是 K 组数据,每组包含:方式名称(字符串)、延误风险(浮点数)、运费(浮点数)。
输出描述
输出最优总运费(保留两位小数)。

样例共 2 组

样例 1 · 2 个中转段,延误风险阈值为 0.4。 枚举所有组合: (1) express+express:风险 0.1+0.05=0.15,运费 300+250=550 (2) express+standard:风险 0.1+0.2=0.3,运费 300+100=400 (3) standard+express:风险 0.25+0.05=0.3,运费 120+250=370 (4) standard+standard:风险 0.25+0.2=0.45 > 0.4,不可行 满足约束的方案中,最小运费为方案(3)的 370。
输入
2 0.4
2 express 0.1 300.0 standard 0.25 120.0
2 express 0.05 250.0 standard 0.2 100.0
输出
370.00
样例 2 · 3 个中转段,延误风险阈值为 0.5。第一段只有 ground 可选(风险 0.15,运费 80)。 可行方案: (1) ground+ground+air:风险 0.15+0.3+0.05=0.5,运费 80+90+180=350 (2) ground+air+ground:风险 0.15+0.1+0.2=0.45,运费 80+200+70=350 (3) ground+air+air:风险 0.15+0.1+0.05=0.3,运费 80+200+180=460 ground+ground+ground 风险 0.65 超出阈值,不可行。 最小运费为 350。
输入
3 0.5
1 ground 0.15 80.0
2 air 0.1 200.0 ground 0.3 90.0
2 air 0.05 180.0 ground 0.2 70.0
输出
350.00

算法解析依据充分

考点:动态规划

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:动态规划

本题切入点

每个中转段必须且只能选一种运输方式、总风险 ≤T 的最小运费:把风险当容量做分组背包 DP,最后输出最小总运费两位小数。

把问题拆成子问题,用状态表示「已处理到哪儿」,靠转移方程递推。

思路框架(动态规划 通法 · 非本题专属)

  1. 定义状态:dp[i] / dp[i][j] 表示什么(这是最关键的一步,状态定义错就全错)。
  2. 写转移方程:当前状态由哪些更小的状态推来。
  3. 确定初始条件与遍历顺序(保证用到的状态已算好)。
  4. 确定答案取哪个状态;数值大时全程取模。

实现要点:一般是「先枚举阶段,再枚举状态,最后枚举决策」三层循环;空间大时可滚动数组优化。

复杂度:时间 O(状态数 × 转移代价) | 空间 O(状态数)

该范式的通法易错点

  • 状态定义不完整(漏了必要维度),导致子问题之间有后效性。
  • 初始化写错(尤其「恰好」与「至多」的初值差别)。
  • 遍历顺序与依赖方向不一致。

样例解读

样例 1:输入 2 0.4 / 2 express 0.1 300.0 standard 0.25 120.0 / 2 express 0.05 250.0 standard 0.2 100.0 → 输出 370.00

2 个中转段,延误风险阈值为 0.4。

枚举所有组合:

(1) express+express:风险 0.1+0.05=0.15,运费 300+250=550

(2) express+standard:风险 0.1+0.2=0.3,运费 300+100=400

(3) standard+express:风险 0.25+0.05=0.3,运费 120+250=370

(4) standard+standard:风险 0.25+0.2=0.45 > 0.4,不可行

满足约束的方案中,最小运费为方案(3)的 370。

样例 2:输入 3 0.5 / 1 ground 0.15 80.0 / 2 air 0.1 200.0 ground 0.3 90.0 / 2 air 0.05 180.0 ground 0.2 70.0 → 输出 350.00

3 个中转段,延误风险阈值为 0.5。第一段只有 ground 可选(风险 0.15,运费 80)。

可行方案:

(1) ground+ground+air:风险 0.15+0.3+0.05=0.5,运费 80+90+180=350

(2) ground+air+ground:风险 0.15+0.1+0.2=0.45,运费 80+200+70=350

(3) ground+air+air:风险 0.15+0.1+0.05=0.3,运费 80+200+180=460

ground+ground+ground 风险 0.65 超出阈值,不可行。

最小运费为 350。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-2月4号AI岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解