CSP题解|202305-2 矩阵运算|70分
#include <bits/stdc++.h> using namespace std; int main(){ int n,d;//n为矩阵的行数,d为列数 cin>>n>>d; //输入三个n行d列的矩阵,KT为K转置 long long Q[n][d],KT[d][n],V[n][d]; long long W[n]; //输入三个矩阵 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>>KT[j][i]; 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]; //Q右乘KT long long QKT[n][n]; for(int i =0;i<n;i++){ for(int j =0;j<n;j++){ QKT[i][j] = 0; for(int k = 0;k<d;k++){ QKT[i][j]+=Q[i][k]*KT[k][j]; } } } //W点乘QKT for(int i =0;i<n;i++) for(int j =0;j<n;j++) QKT[i][j]*=W[i]; //运算后的QKT(n*n)右乘V(n*d) long long res[n][d]; for(int i =0;i<n;i++){ for(int j =0;j<d;j++){ res[i][j]=0; for(int k =0;k<n;k++){ res[i][j]+=QKT[i][k]*V[k][j]; } } } //输出res for(int i =0;i<n;i++){ for(int j =0;j<d;j++) cout<<res[i][j]<<" "; cout<<endl; } }
70分,应该是超时了,没有优化。
学习了矩阵乘法。
——————————————————
补:优化思路:乘法结合律:https://blog.csdn.net/qq_45123552/article/details/136766874