你在为一门极少见的语言做专用分词。语言学家给出了一个“小词典”,每个条目都有一个分值,表示该词单独成词的合理性强弱。 同时,还收集了“相邻词对”的转移加分:当上一个词与下一个词按某种搭配出现时,整体会多(或少)一些分数。 你的目标是在给定的连续小写字母串中,切分出一条完整的词序列,使“词典分+转移加分”的总和最大。如果无法用词典完全覆盖整串,则输出0。
第一行:文本串 text,仅含小写英文字母。 第二行:整数 n,表示词典条目数。 接下来 n 行:每行一个词与其分值,中间用空格分隔。 接下来一行:整数 m,表示转移加分条目数。 接下来 m 行:每行包含“前词 后词 加分”,三者以空格分隔,加分可为负。
一行,一个整数:最大可获得的总分。如果不存在任何完整切分,输出0。
aababa 4 a 1 aa 3 ab 2 ba 2 3 aa ba 2 ba ba -1 ab a 1
8
考点:动态规划
限制 1 秒 / 256MB | 标准输入输出
推荐方向:动态规划
本题切入点
带转移加权的分词问题:dp[i] = 以 i 结尾的最大总分,枚举上一个切分点 j,加上词典分与「上一个词 → 当前词」的转移加分;无法完全覆盖时答案为 0。
把问题拆成子问题,用状态表示「已处理到哪儿」,靠转移方程递推。
思路框架(动态规划 通法 · 非本题专属)
实现要点:一般是「先枚举阶段,再枚举状态,最后枚举决策」三层循环;空间大时可滚动数组优化。
复杂度:时间 O(状态数 × 转移代价) | 空间 O(状态数)
该范式的通法易错点
样例 1:输入 aababa / 4 / a 1 / aa 3 / ab 2 / ba 2 / 3 / aa ba 2 / ba ba -1 / ab a 1 → 输出 8
· 最优切分:aa | ba | ba· 词典分:3 + 2 + 2 = 7
· 转移分:aa→ba = +2,ba→ba = -1
· 总分:7 + 2 - 1 = 8
· 其他可行切分(例如:a | ab | a | ba)· 词典分:1 + 2 + 1 + 2 = 6
· 转移分:ab→a = +1(其余未命中)
· 总分:6 + 1 = 7
因此最优答案为 8。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-华为-9月17号AI岗。