矩阵乘法 codevs 1287 矩阵乘法

1287 矩阵乘法

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题目描述 Description

小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容。
当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的。小明希望你来帮他完成这个任务。

现在给你一个ai行aj列的矩阵和一个bi行bj列的矩阵,要你求出他们相乘的积(当然也是矩阵)。
(输入数据保证aj=bi,不需要判断)

矩阵乘法的定义:

1. 矩阵A乘以B的时候,必须要求A的列数=B的行数,否则无法进行乘法运算。因此矩阵乘法也不满足交换律。

2. 设A是X*N的矩阵,B是N*Y的矩阵,用A的每一行乘以B的每一列,得到一个X*Y的矩阵。对于某一行乘以某一列的运算,我们称之为向量运算,即对应位置的每个数字相乘之后求和。

写为公式及:

C[i,j] = Sigma(A[i,k] * B[k,j])

输入描述 Input Description

输入文件共有ai+bi+2行,并且输入的所有数为整数(long long范围内)。
第1行:ai 和 aj
第2~ai+2行:矩阵a的所有元素
第ai+3行:bi 和 bj
第ai+3~ai+bi+3行:矩阵b的所有元素

输出描述 Output Description

输出矩阵a乘矩阵b的积(矩阵c)

样例输入 Sample Input

2 2
12 23
45 56
2 2
78 89
45 56

样例输出 Sample Output

1971 2356
6030 7141

数据范围及提示 Data Size & Hint

矩阵大小<=200*200

 1 #define N 210
 2 #include<iostream>
 3 using namespace std;
 4 typedef long long ll;
 5 ll a[N][N],b[N][N],ans[N][N];
 6 int ahang,alie,bhang,blie,anshang,anslie;
 7 int main()
 8 {
 9     cin>>ahang>>alie;
10     for(int i=1;i<=ahang;++i)
11       for(int j=1;j<=alie;++j)
12       cin>>a[i][j];
13     cin>>bhang>>blie;
14     for(int i=1;i<=bhang;++i)
15       for(int j=1;j<=blie;++j)
16       cin>>b[i][j];
17     anshang=ahang;
18     anslie=blie;
19     for(int i=1;i<=anshang;++i)
20       for(int j=1;j<=anslie;++j)
21       {
22           ans[i][j]=0;
23           for(int k=1;k<=alie;++k)
24           ans[i][j]+=a[i][k]*b[k][j];
25       }
26     for(int i=1;i<=anshang;++i)
27     {
28         for(int j=1;j<=anslie;++j)
29           cout<<ans[i][j]<<" ";
30         cout<<endl;
31     }
32     return 0;
33 }
时间: 2024-08-10 17:03:00

矩阵乘法 codevs 1287 矩阵乘法的相关文章

[CODEVS 3147] 矩阵乘法 2

描述 给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和. http://codevs.cn/problem/3147/ 分析 直接 n3 的矩阵乘法肯定超时, 要采用前缀和优化 row[s1] - row[t1] col[s2] - col[t2] (s1, s2) – (t1, t2) row[x] * col[y] 表示用第 x 行的所有元素去乘第 y 行的所有元素. ==> = row[s1] * col[s2] + row[s1] * col[s2+1] + - + row[s

1287 矩阵乘法

1287 矩阵乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容.当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的.小明希望你来帮他完成这个任务. 现在给你一个ai行aj列的矩阵和一个bi行bj列的矩阵,要你求出他们相乘的积(当然也是矩阵).(输入数据保证aj=bi,不需要判断) 矩阵乘法的定义: 1. 矩阵A乘以B的

codevs 1166 矩阵取数游戏

二次联通门 : codevs 1166 矩阵取数游戏 /* codevs 1166 矩阵取数游戏 SB区间dp dp[l][r] = max (dp[l + 1][r] + number[l], dp[l][r - 1] + number[r]) * 2; 不过要套高精 我用的高精是全部封装好的 可以像平时的int等类型用 缺点就是慢... 慢差不多1/3吧.. */ #include <iostream> #include <cstdio> #include <vector

【矩阵与行列式】矩阵和行列式学习笔记

开始从ToDoList里挑东西来杀. 感觉矩阵和行列式这两个跟很多东西都有关而且接触最少 所以先从它们开始补>w< P.S.看了很多资料,他们对矩阵和行列式这些东西的介绍都很丧病-我会尽量用通俗的语言来写我的笔记= =如果您不喜欢这种风格QAQ那我也没办法了请隔壁看别人的吧 ---------线割分是我>w<--------------– 什么是矩阵? 矩阵是n*m个数在n*m这个二维区域内的一个排列,是一个横纵排列的二维数字表格. 也就是说,矩阵只是一些数的一种存储形式. 通常我

HDU 1575 &amp;&amp; 1757 矩阵快速幂&amp;&amp;构造矩阵入门

HDU 1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2912    Accepted Submission(s): 2167 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据.每组

输入一个整数矩阵,计算位于矩阵边缘的元素之和

输入一个整数矩阵,计算位于矩阵边缘的元素之和.所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素. 源代码: #include<stdio.h> #include<stdlib.h> int main() { int m,n;//矩阵的长和宽 int sum = 0; printf("输入矩阵的长和宽\n"); scanf("%d%d",&m,&n); int a[m][n];//存储矩阵的值 //为矩阵

HihoCoder 1480:矩阵填数 (杨氏矩阵 || 钩子公式 + 筛逆元)

描述 小Hi在玩一个游戏,他需要把1, 2, 3, ... NM填入一个N行M列的矩阵中,使得矩阵每一行从左到右.每一列从上到下都是递增的. 例如如下是3x3的一种填法: 136 247 589 给定N和M,小Hi希望知道一共有多少种不同的填法. 输入 一行包含两个整数N和M. 对于60%的数据 1 <= N <= 2, 1 <= M <= 100000 对于20%的数据 N = 3, 1 <= M <= 100 对于100%的数据 1 <= N <= 3,

特征提取与匹配、基础矩阵、单应矩阵、极限约束

Ubuntu16.04 + opencv2.4.9 一.特征提取与匹配 (以ORB特征为例) features.cpp 1 #include<iostream> 2 #include<opencv2/core/core.hpp> 3 #include<opencv2/highgui/highgui.hpp> 4 #include<opencv2/features2d/features2d.hpp> 5 #include<opencv2/calib3d/

【bzoj3240 &amp;&amp; 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的方法. 首先定义两个矩阵: $ A_{1} = \begin{bmatrix} a & b \\ 0 & 1 \end{bmatrix} $ $ A_{2} = \begin{bmatrix} c & d \\ 0 & 1 \end{bmatrix} $ 于是我们就可以得到这样