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

题目描述

我们在搭建一个基于 RAG(Retrieval-Augmented Generation,检索增强生成)的问答系统。系统每天会接收用户问题,并基于“知识库”检索相关材料后再生成答案。为了保证检索质量,知识库需要定期“更新”(例如重抽取文档、重算向量、重建索引等),但更新会消耗计算资源。另一方面,只有当知识库处于“有效”状态时,基于它进行的查询才有实际收益;知识库过期后继续查询几乎没有价值(可以视为收益 0)。
因此,在接下来的 n 个连续自然日(周期)内,我们需要规划每天是否进行“更新”、是否“查询”,以最大化净利润(总查询收益 − 总更新成本)。
规则说明
·
初始状态:第 0 天开始时,知识库“过期”。
·
更新生效:若在第 i 天执行更新,则从第 i 天起连续 d 天“有效”,覆盖区间 [i, i+d-1]。有效当日可以马上用于查询。
·
每天允许的操作(每天最多选一个):
·
更新并查询:当日支付 update_cost[i],同时获得当日查询收益 query_reward[i](因为更新后立即有效)。
·
仅查询:若当日处于有效期,则获得 query_reward[i];若过期,则收益为 0。
·
什么也不做:无成本、无收益(若当日处于有效期,仍会消耗有效期一天)。
·
目标:在 n 天内,使“总查询收益 − 总更新成本”最大。
直观理解:更新能“刷新”后续 d 天的检索质量(可带来查询收益),但更新要花钱;不更新也能查,但只有在还没过期的有效日才有收益。

输入输出

输入描述
· 第 1 行:n d
· 第 2 行:update_cost(长度为 n,空格分隔)
· 第 3 行:query_reward(长度为 n,空格分隔)
输出描述
· 一行一个整数:最大净利润

样例共 1 组

样例 1 · · 第0天:更新并查询,收益5−成本3=+2(有效覆盖第0、1天) · 第1天:更新并查询,收益0−成本2=−2(有效重置覆盖第1、2天) · 第2天:仅查询,+5(仍在有效期) · 第3天:不操作,+0 合计 2−2+5=5。
输入
4 2
3 2 4 2
5 0 5 0
输出
5

算法解析依据充分

考点:动态规划

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

题目画像

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

解题思路

推荐方向:动态规划

本题切入点

按天做 DP:状态含「当前是否处于有效期/剩余有效天数」,每天枚举「更新并查询 / 仅查询 / 什么都不做」三种决策取最大值,也可用「更新日 + 覆盖区间」的线性递推。

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

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

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

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

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

该范式的通法易错点

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

样例解读

样例 1:输入 4 2 / 3 2 4 2 / 5 0 5 0 → 输出 5

· 第0天:更新并查询,收益5−成本3=+2(有效覆盖第0、1天)

· 第1天:更新并查询,收益0−成本2=−2(有效重置覆盖第1、2天)

· 第2天:仅查询,+5(仍在有效期)

· 第3天:不操作,+0

合计 2−2+5=5。

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

本题来源:2026年春招-华为-01月07号AI岗。

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