我们在搭建一个基于 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,空格分隔)
· 一行一个整数:最大净利润
4 2 3 2 4 2 5 0 5 0
5
考点:动态规划
限制 1 秒 / 256MB | 标准输入输出
推荐方向:动态规划
本题切入点
按天做 DP:状态含「当前是否处于有效期/剩余有效天数」,每天枚举「更新并查询 / 仅查询 / 什么都不做」三种决策取最大值,也可用「更新日 + 覆盖区间」的线性递推。
把问题拆成子问题,用状态表示「已处理到哪儿」,靠转移方程递推。
思路框架(动态规划 通法 · 非本题专属)
实现要点:一般是「先枚举阶段,再枚举状态,最后枚举决策」三层循环;空间大时可滚动数组优化。
复杂度:时间 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岗。