对每个样本由 logits 计算 softmax。基础损失是正确标签的交叉熵 l_i=- p_i,y_i ,分布熵为 H_i=-Σ_jp_i,j p_i,j 。 样本还有正整数代价 c_i 。在总代价不超过 B 时,选择一个集合,使被选样本的交叉熵之和最大。最终损失为所有基础损失之和,加上 乘以被选样本的分布熵之和。题目保证最优选择唯一。
第一行输入 N,V,B, 。随后 N 行,每行先输入 V 个 logits,再输入正确标签 y_i 和代价 c_i 。 保证 N× V≤5×10^5 , 1≤ N≤500 , 2≤ V , 1≤ B≤5000 , 0≤ y_i<V , 1≤ c_i≤ B ,logit 绝对值不超过 100, 0≤≤100 。
输出最终损失,四舍五入保留 2 位小数。
4 4 4 0.8 3.00 1.00 0.00 -1.00 0 2 0.00 1.00 3.00 0.00 2 2 1.00 1.00 1.00 1.00 1 3 2.00 0.00 1.00 2.00 3 1
4.75
3 3 3 0.5 2.00 1.00 0.00 0 2 0.00 2.00 1.00 1 1 1.00 1.00 1.00 2 2
2.88
考点:动态规划
数据规模 N ≤ 500 | 限制 2 秒 / 256MB | 标准输入输出
推荐方向:动态规划
本题切入点
对每个样本先算 softmax、交叉熵与分布熵;「总代价 ≤B 时被选样本交叉熵之和最大」是 0/1 背包 DP,最终损失 = 全部基础损失之和 + λ×(被选样本熵之和)。
把问题拆成子问题,用状态表示「已处理到哪儿」,靠转移方程递推。
思路框架(动态规划 通法 · 非本题专属)
实现要点:一般是「先枚举阶段,再枚举状态,最后枚举决策」三层循环;空间大时可滚动数组优化。
复杂度:时间 O(状态数 × 转移代价) | 空间 O(状态数)
该范式的通法易错点
对照本题
样例 1:输入 4 4 4 0.8 / 3.00 1.00 0.00 -1.00 0 2 / 0.00 1.00 3.00 0.00 2 2 / 1.00 1.00 1.00 1.00 1 3 / 2.00 0.00 → 输出 4.75
最优选择第 3、4 个样本。
样例 2:输入 3 3 3 0.5 / 2.00 1.00 0.00 0 2 / 0.00 2.00 1.00 1 1 / 1.00 1.00 1.00 2 2 → 输出 2.88
最优选择第 2、3 个样本。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-07月01号AI岗。