思路:开始按照题目思路,按照题目所给公式值获得了70分,主要在于运算时间,在参考了其他题解,可以让K先于V相乘获得d*d矩阵,大小比Q*K相乘获得n*n矩阵运算量小很多
在开始输入中将k直接转置,但在规定k的大小的时候未修改范围,还是k[10010][30],到自己程序一直错误
代码如下:
#include<iostream>
using namespace std;
int Q[10010][30];
int K[30][10010];
long long int KV[30][30];
int W[10010];
int V[10010][30];
long long int res[10010][30];
void test1(){
int n,d;
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[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];
}
for(int i=0;i<d;i++){
for(int j=0;j<d;j++){
KV[i][j]=0;
for(int k=0;k<n;k++){
KV[i][j]+=K[i][k]*V[k][j];
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<d;j++){
res[i][j]=0;
for(int k=0;k<d;k++){
res[i][j]+=Q[i][k]*KV[k][j];
}
res[i][j]*=W[i];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<d;j++){
cout<<res[i][j]<<" ";
}
cout<<endl;
}
}
int main(){
test1();
system("pause");
return 0;
}