矩阵

区间DP——tyvj 1198 矩阵连乘

孤者浪人 提交于 2020-01-02 02:49:50
G. tyvj 1198 矩阵连乘 内存限制:128 MiB     时间限制:1000 ms     标准输入输出 题目类型:        传统 评测方式:文本比较 题目描述 一个nm矩阵由n行m列共nm个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个NM的矩阵乘以一个MP的矩阵等于一个NP的矩阵,运算量为nmp。 矩阵乘法满足结合律,ABC可以表示成(AB)C或者是A(BC),两者的运算量却不同。例如当A=23 B=34 C=45时,(AB)C=64而A(BC)=90。显然第一种顺序节省运算量。 现在给出N个矩阵,并输入N+1个数,第i个矩阵是a[i-1]*a[i]。 输入格式 第一行n(n<=100) 第二行n+1个数 输出格式 最优的运算量 样例 样例输入 3 2 3 4 5 样例输出 64 思路如下 首先,对于 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int n; 6 long long in[201],dp[201][201]/*第 i 个 至 第 j 个 的 最 小 值 */; 7 int main() 8 { 9 cin>>n; 10 for(int i=0;i<=n;i++) 11 cin>>in[i]; 12

tyvj1198 最优矩阵连乘

…衆ロ難τιáo~ 提交于 2020-01-02 02:48:57
描述 一个n*m矩阵由n行m列共n*m个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算量为nmp。 矩阵乘法满足结合律,A*B*C可以表示成(A*B)*C或者是A*(B*C),两者的运算量却不同。例如当A=2*3 B=3*4 C=4*5时,(A*B)*C=64而A*(B*C)=90。显然第一种顺序节省运算量。 现在给出N个矩阵,并输入N+1个数,第i个矩阵是a[i-1]*a[i] 输入格式 第一行n(n<=100) 第二行n+1个数 输出格式 最优的运算量 测试样例1 输入 3 2 3 4 5 输出 64 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> using namespace std; const long long maxn = 105,maxint = 98765432123456L; long long n,a[maxn],f[maxn][maxn]; int main(){ cin>>n; for(int i = 1;i <= n+1;i++){ cin>>a[i]; } for(int i = 1;i <= n+1;i+

数组和矩阵的问题转圈打印数组

十年热恋 提交于 2020-01-02 00:38:10
package demo2; import java.util.Scanner; public class Main { private static Scanner input = new Scanner(System.in); public static void main(String[] args) { //1:首先初始化一个矩阵 //2:打印这个矩阵中的值 printMatrix(init(4,4)); } public static int [][] init(int row,int col){ int [][] matrix = new int[row][col]; for (int i = 0;i<row;i++) { for (int j = 0;j<col;j++) { matrix [i][j] = input.nextInt(); } } return matrix; } public static void printMatrix(int [][] matrix){ int tr = 0; int tc = 0; int dr = matrix.length - 1; int dc = matrix[0].length - 1; while (tr <= dr && tc <= dc) { printEdge(matrix,tr++,tc++,dr--

矩阵的最小路径和

[亡魂溺海] 提交于 2020-01-02 00:37:59
经典动态规划法。 如果给定矩阵如下: 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1,0是所有路径中路径和的最小的,1+3+1+0+6+1+0=12,所以返回12。 代码如下: public class demo5 {   public static void main(String[] args) {   int[][] array = {{1,3,5,9},{8,1,3,4},{5,0,6,1},{8,8,4,0}};   int[][] result = minPathSum(array);   System.out.println(result[result.length-1][result[0].length-1]); }   public static int[][] minPathSum(int[][] array) {     int row = array.length;     int col = array[0].length;     int[][] m = new int[row][col];     m[0][0] = array[0][0];     for(int i = 1; i < row; ++i){       m[i][0] = array[i][0] + m[i-1][0];     }    

投影矩阵推导(翻译)

我们两清 提交于 2020-01-01 21:57:24
投影矩阵推导(翻译) 原网址: http://www.codeguru.com/cpp/misc/misc/graphics/article.php/c10123/Deriving-Projection-Matrices.htm 3D矩阵变换中,投影矩阵是最复杂的。位移和缩放变换一目了然,旋转变换只要基本的三角函数就能想象出来,投影矩阵则很难凭借直觉想象出来。 总述:什么是投影 计算机显示屏是二维平面,所以如果你想显示三维物体,需要找到把三维物体渲染成二维图像的方法。这正是投影要做的。最简单的做法:直接丢掉三维物体各顶点的Z坐标。对于一个立方体,看起来像图1: 图1 通过丢掉Z坐标方法投影到XY平面 这种投影简单且不实用。所以,一开始就不应该投影到“面”(plane)上,而应该投影到一个“体”(volume)内,即所谓的“规范视域体”(canonical view volume)。规范视域体的顶点坐标在不同的API(DirectX/OpenGL)中有所不同。这里就用D3D的标准,从 (-1,-1,0)到(1,1,1)。当所有的顶点映射到规范视域体中后,XY坐标用来再映射到屏幕上。Z坐标看起来无用,不过通常用来表示深度信息。这也是为什么会投影到一个“体”,而不是“面”的原因。 下面将讲述两种常见变换:正交变换、透视变换。 正交变换 “正交”的由来是投影线与显示平面垂直

Pytorch框架应用系列 之 BPNet 4-2:全连接层到矩阵计算!FC近在眼前!

核能气质少年 提交于 2020-01-01 17:05:27
专题介绍及文章命名 2020年第一更!!祝愿大家新年快乐!撸起袖子加油干!越是艰险越向前!! 专题介绍在此!希望各位读者对这个专题的各篇博客定位有全局性质的把握~~ 再次提醒:该系列专题不涉及网络细节讲解,仅限于 工程实现 与 框架学习 。想更多了解该专题内容请点击上文专题介绍链接。 该专题中,文章命名方式为: Pytorch框架应用系列 之 《项目名称》 《总章节-当前章节》:《当前章节项目名称》 BP网络专题综述在此!想了解BP网络章节的文章构成?点击此处! 目录 一. 任务模型展示 二. 函数讲解   2.1 全连接层扛把子:torch.nn.Linear    2.1.1 函数的定义及参数功能    2.1.2 函数的数学表达与数据格式 《子任务章节》    2.1.3 函数的调用实例   2.2 激活函数:torch.nn.Sigmoid    2.2.1 函数的定义及参数功能    2.2.2 函数的调用实例   2.3 网络结构容器:torch.nn.Sequential    2.3.1 函数的定义及参数功能    2.3.2 函数的调用实例 三. 专题及章节位置信息查询 一. 任务模型展示 二. 函数讲解 2.1 全连接层扛把子:torch.nn.Linear; 注:明星函数 2.1.1 函数的定义及参数功能 首先我们先来看看官方的完整定义:

Opencv入门基础笔记02

这一生的挚爱 提交于 2020-01-01 13:12:46
Opencv入门基础笔记02:矩阵的掩模操作 我们都知道,图片是由一个个像素点组成的,那么,我理解为一个巨大的矩阵,而矩阵掩模,就是,自己定义了一个特定的矩阵“kernel”或者叫“mask”,即掩模,然后,进行对矩阵的叉乘,是卷积滤波的一种体现,然后使图片呈现自己想要的样子。 实际上,掩膜mask是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。在OpenCV中,掩模操作是相对简单的。大致的意思是,通过一个掩模矩阵,重新计算图像中的每一个像素值。掩模矩阵控制了旧图像当前位置以及周围位置像素对新图像当前位置像素值的影响力度。用数学术语讲,即我们自定义一个权重表。 1.用到的主要函数(filter2D,Mat,saturate_cast) 我们主要将掩模操作实现图片对比度的提高。用到的掩模为 Mat kern = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); 对应实际的数学计算公式为 I(i,j) = 5*I(i,j) - [I(i-1,j) + I(i+1,j) + I(i,j-1) + I(i,j+1)] 其中(i,j)是图片像素点坐标,I就是我们上面说的Kernel或者叫掩模mask

【图论】2 图的建立与遍历

最后都变了- 提交于 2020-01-01 12:25:44
在c++中我们应如何表示一张图呢? 表示完成后又应如何调用呢? 1.图的建立 我们有许多方法存住一张图,在csp-s考试范围常用的方法有:   1.邻接矩阵  2.数组模拟链表(前向星)   (当然还有许多其他方法) 邻接矩阵 理解很简单: 对于一个二维数组 a [i] [j],a [i] [j]的值即为 点 i 到点 j 的边的边权。 就是说我们总是将 从i 到 j 的单向边的边权赋给 用以存这个边的二维数组的对应位置 来源: https://www.cnblogs.com/rtrtrt/p/12128617.html

头条面试的coding题目

China☆狼群 提交于 2020-01-01 10:40:54
leetcode 第二题 Add Two Numbers sql的窗口函数row_number使用 有一个2乘以1的小矩阵和一个2乘以n的大矩阵,小矩阵可以横着或者竖着放,问,小矩阵能铺满大矩阵,有多少种方式? 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(二维矩阵搜索) 100亿条数据中查找前100大的值,用O(nlogk)的算法和O(n)的算法来解决 leetcode 363题 Max Sum of Rectangle No Larger Than K 最大矩阵和不超过K 来源: CSDN 作者: 仙人雨 链接: https://blog.csdn.net/qq_27696709/article/details/103772690

4.A=LU的矩阵分解(消元法的另一种求解方式)

烈酒焚心 提交于 2020-01-01 01:10:48
一.了解A=LU 其实简单的说A=LU是高斯消元法的另一种求解形式。 从上一节中,我们知道高斯消元法的形式主要是 EA=U。 其中 E 我们称其为消元矩阵。通过 进行变换,其中 。通过上边的变换,我们可以得到 A=LU。 在这里 L 就是英文单词lower,代表着下三角; U 的英文单词就是upper代表着上三角。 举个例子:2X2的例子 E x A = U 通过变换得到: A = L x U 我们还可以通过进一步的分解U,来进行LDU分解,把主元提出来: A = L x D x U 其中 D 是英文单词(diagonal)。表示对角矩阵的意思。通过LDU的分解产生的作用是很多的,接下来的博客会介绍。 二. 为什么要进行LU分解消元法 1.方便计算 举个3x3矩阵的例子。 对于一个矩阵A,假如需要通过三次消元才能得到U,这三次消元分别是 。所以 。 例如: 则 转换成 A=LU 的形式: . 通过上边我们发现通过普通消元法得到的初等矩阵在第三行有个数10,这是因为把第一行的-2倍加到了第二行,新的第二行的-5倍加到了第三行,所以第三行的10倍第一行加到第三行。这个10的出现大大降低了我们消元矩阵的可读性,特别是对于大型矩阵来说,也加大了他的存储和处理。而我们观察 L, 他首先是个下三角形的对角矩阵,对角全是1,同时他的其他元素刚好是我们要对各行处理的倍数