1 条题解
-
0
题意分析
这道题目要求我们实现多个矩阵的连续乘法运算。具体来说:
给定一系列矩阵,保证相邻矩阵的维度是兼容的(前一个矩阵的列数等于后一个矩阵的行数)
需要按照给定的顺序将这些矩阵相乘
输出最终的结果矩阵
输入保证所有中间结果和最终结果都在整数范围内
解题思路
基础解法
这是一个标准的矩阵乘法问题,可以直接按照矩阵乘法的定义来实现:
矩阵乘法定义:
对于矩阵和矩阵,它们的乘积C(m×n)满足: ,其中k从1到p
连续乘法:
从第一个矩阵开始,依次与后续矩阵相乘
每次乘法的结果作为下一次乘法的第一个矩阵
算法步骤
读取第一个矩阵作为初始结果矩阵
依次读取后续矩阵:
检查维度是否兼容(前矩阵列数=后矩阵行数)
执行矩阵乘法
将结果存储为新的结果矩阵
输出最终的结果矩阵
复杂度分析
时间复杂度:O(XMN*P),其中X是矩阵数量,M,N,P是矩阵维度
空间复杂度:O(M*N)存储结果矩阵
代码实现
#include <iostream> #include <vector> using namespace std; vector<vector<int> > matrixMultiply(const vector<vector<int> >& A, const vector<vector<int> >& B) { int m = A.size(); int p = A[0].size(); int n = B[0].size(); vector<vector<int> > C(m, vector<int>(n, 0)); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { for (int k = 0; k < p; ++k) { C[i][j] += A[i][k] * B[k][j]; } } } return C; } int main() { int Z; cin >> Z; while (Z--) { int X; cin >> X; vector<vector<int> > result; for (int x = 0; x < X; ++x) { int M, N; cin >> M >> N; vector<vector<int> > matrix(M, vector<int>(N)); for (int i = 0; i < M; ++i) { for (int j = 0; j < N; ++j) { cin >> matrix[i][j]; } } if (x == 0) { result = matrix; } else { result = matrixMultiply(result, matrix); } } // 改用传统for循环输出 for (size_t i = 0; i < result.size(); ++i) { for (size_t j = 0; j < result[i].size(); ++j) { if (j != 0) cout << " "; cout << result[i][j]; } cout << endl; } cout << endl; } return 0; }
- 1
信息
- ID
- 994
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者