1 条题解
-
0
练62.2 矩阵乘法
解题思路
C的第i行第j列等于A第i行与B第j列点积,枚举中间维t累加A[i][t]*B[t][j]。三重循环构成矩阵乘法。
正确性说明
依题目给出的对应关系逐项处理,位置与原输入保持明确对应。每一步完成当前项的全部贡献,结束后得到所有位置或字符的目标结果。
易错点
结果维度n×k,不是n×m;累加器用long long。
复杂度
时间O(nmk),空间O(nm+mk)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, k; cin >> n >> m >> k; vector<vector<long long>> a(n, vector<long long>(m)), b(m, vector<long long>(k)); for (auto &r : a) for (auto &x : r) cin >> x; for (auto &r : b) for (auto &x : r) cin >> x; for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { long long sum = 0; for (int t = 0; t < m; t++) sum += a[i][t] * b[t][j]; if (j) cout << " "; cout << sum; } cout << "\n"; } return 0; }
- 1