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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务