
1.2025年秋招-华为-9月17号AI岗真题 2026.3.23代码题简化Attention输出的元素总和给定三个正整数 n、m、h均小于 100构造如下数据并计算结果。数据构造规则输入特征矩阵 X 为 n×m 的全 1 矩阵。三个权重矩阵 W1、W2、W3 均为 m×h 的“上三角全 1”矩阵按行列索引在主对角线及其上方位置为 1其余为 0当 m≠h 时视为按行列索引的上三角扩展。令 QX·W1KX·W2VX·W3计算 S(Q·K^T)/sqrt(h)。softmax 按行做“归一化”对任意行向量 rsoftmax(r) 的每个元素等于该元素除以本行所有元素之和。Ysoftmax(S)·V。输出要求求矩阵 Y 所有元素的和四舍五入到整数后输出。#include iostream #include bits/stdc.h using namespace std; int main() { int n, m, h; while (cin n m h) { // 多组输入 // 输入矩阵 vectorvectorint X(n, vectorint(m, 1)); // 权重矩阵 vectorvectorint W_1(m, vectorint(h, 1)); vectorvectorint W_2(m, vectorint(h, 1)); vectorvectorint W_3(m, vectorint(h, 1)); // 下三角置0 for (int i 0; i m; i) { for (int j 0; j i; j) { W_1[i][j] 0; W_2[i][j] 0; W_3[i][j] 0; } } // Q, K, V vectorvectorint Q(n, vectorint(h, 0)); vectorvectorint K(n, vectorint(h, 0)); vectorvectorint V(n, vectorint(h, 0)); for (int i 0; i n; i) { for (int j 0; j h; j) { for (int k 0; k m; k) { Q[i][j] X[i][k] * W_1[k][j]; K[i][j] X[i][k] * W_2[k][j]; V[i][j] X[i][k] * W_3[k][j]; } } } // S QK^T vectorvectordouble S(n, vectordouble(n, 0)); for (int i 0; i n; i) { for (int j 0; j n; j) { for (int k 0; k h; k) { S[i][j] Q[i][k] * K[j][k]; } S[i][j] / sqrt(h); } } // 行归一化简化版 softmax vectordouble rows(n, 0); for (int i 0; i n; i) { for (int j 0; j n; j) { rows[i] S[i][j]; } if (rows[i] 0) rows[i] 1; // 防止除0 } for (int i 0; i n; i) { for (int j 0; j n; j) { S[i][j] / rows[i]; } } // Y S * V vectorvectordouble Y(n, vectordouble(h, 0)); double count 0; for (int i 0; i n; i) { for (int j 0; j h; j) { for (int k 0; k n; k) { Y[i][j] S[i][k] * V[k][j]; } count Y[i][j]; } } printf(%lld\n, (long long)count); } return 0; }最优分词器你在为一门极少见的语言做专用分词。语言学家给出了一个“小词典”每个条目都有一个分值表示该词单独成词的合理性强弱。同时还收集了“相邻词对”的转移加分当上一个词与下一个词按某种搭配出现时整体会多或少一些分数。你的目标是在给定的连续小写字母串中切分出一条完整的词序列使“词典分转移加分”的总和最大。如果无法用词典完全覆盖整串则输出0。