#include<iostream> using namespace std; int n, d; const int N = 10010, M =110; long long Q[N][M], K[N][M], V[N][M], W[N],KK[N][M],QK[N][N], QQK[N][M]; int main() { cin >> n >> d; for (int i = 0; i < n; i++) { for (int j = 0; j < d; j++) { cin >> Q[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < d; j++) { cin >> K[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < d; j++) { cin >> V[i][j]; } } for (int i = 0; i < n; i++) { cin >> W[i]; } for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { for (int k = 0; k < n; k++) { QK[i][j] += K[k][i] * V[k][j]; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < d; j++) { for (int k = 0; k < d; k++) { QQK[i][j] += Q[i][k] * QK[k][j]; } /* QQK[i][j] *= W[i];*/ } } for (int i = 0; i < n; i++) { for (int j = 0; j < d; j++) { QQK[i][j] *= W[i]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < d; j++) { cout << QQK[i][j] << " "; } cout << endl; } return 0; }
这道题由两个坑,第一个是复杂度问题:如果从前往后正常算的话时间复杂度是n的平方*d,
从后算的话时间复度是d的平方*n,因为d远小于n,所以要从后面算,不然会爆掉;第二个是矩阵中数字的大小,int会爆掉,所以选择long long存储
csp认证.矩阵运算
最新推荐文章于 2024-07-23 11:46:27 发布