トレーニング行列の乗算アルゴリズム
制限時間:メモリ制限が1.0S:512.0メガバイト
問題の説明
二つの入力行列は、M * S、S * Nサイズです。2つの行列乗算の出力。
入力形式
、mは3つの正の整数のスペースで分離された第1行は、(以下200)N、S。
スペースの次のm行は、整数の分離行列A(i、j)を表します。
次の行は、各列のスペースがn整数を分離し、行列B(i、j)を示しています。
出力フォーマット
n個の整数のm行は、スペースでの行列C(i、j)を乗じた出力値を分離しました。
サンプル入力
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
サンプル出力
-3 2
-8 2
先端
行列Cは、C(i、j)は行列Aのi番目の行列トレッキングBのj番目の列ベクトルの列ベクトルの内積と等しくなるm行n列でなければなりません
例えば、サンプルのC(1,1)=(1,0、 -1)*(0,1,3)= 1 * 0 + 0 * 1 +( - 1)* 3 = -3
#include <stdio.h>
int main()
{
int m, s, n;
int A[202][202] = { 0 }, B[202][202] = { 0 }, C[202][202] = { 0 };
scanf("%d %d %d", &m, &s, &n);
for (int i = 0; i < m; ++i)
for (int j = 0; j < s; ++j)
scanf("%d", &A[i][j]);
for (int i = 0; i < s; ++i)
for (int j = 0; j < n; ++j)
scanf("%d", &B[i][j]);
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
for (int k = 0; k < s; ++k)
{
C[i][j] += A[i][k] * B[k][j];
}
}
}
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
printf("%d ", C[i][j]);
printf("\n");
}
return 0;
}