首页 > 其他分享 >矩阵详

矩阵详

时间:2024-08-30 18:39:09浏览次数:10  
标签:int 矩阵 long ans fi 105

矩阵蛮好用的可以log的优化dp!!!

矩阵乘法

一张图

矩阵构造

以Fibonacci数列:F(0)=1 , F(1)=1 , F(n)=F(n-1)+F(n-2)为例

fi-1 fi-2
fi 1 1
fi-1 1 0

因为fi=fi-1 * 1+fi-2 * 1

fi-1=fi-1 * 1

因此矩阵为

1 1
1 0

还不懂?!戳这

矩阵快速幂

yangrunze的题解所说矩阵快速幂=矩阵乘法+快速幂

所以前置芝士:快速幂

助你理解快速幂:

有注释
#include<bits/stdc++.h>
using namespace std;//long long
int n;
long long m;
long long a[105][105];
long long ans[105][105];
long long MOD=1e9+7;
void f(){//ans=ans*a
	long long c[105][105]={0};
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				c[i][j]=(c[i][j]+ans[i][k]*a[k][j])%MOD;//因为是矩阵所以乘法是这样
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			ans[i][j]=c[i][j];//将答案赋值给ans
		}
	}
}
void fl(){//a=a*a
	long long c[105][105]={0};
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				c[i][j]=(c[i][j]+a[i][k]*a[k][j])%MOD;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=c[i][j];
		}
	}
}
long long read(){   
    long long f=1;
    long long x=0;
    char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-') f=-1;
        c=getchar();
    }
    while('0'<=c&&c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
int main(){
	n=read();
	m=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=read();
		}
	}
	for(int i=1;i<=n;i++) ans[i][i]=1;//为什么这样初始化:你想想这样任何矩阵*ans都=这个矩阵;(就比如快速幂里把ans初始化为1)
	while(m>0){//这何不是快速幂框架乎?????
		if(m%2){
			f();//ans=ans*a;
		}
		fl();//a=a*a
		m>>=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<ans[i][j]%MOD<<" ";
		}
		cout<<endl;
	}
	return 0;
}

The end...

标签:int,矩阵,long,ans,fi,105
From: https://www.cnblogs.com/zjr20120321/p/18389299

相关文章

  • 矩阵的应用
    一.矩阵的基本运算加减法:直接进行加减法即可乘法:对每一行和每一列取乘积和转置:将矩阵倒置并逆时针旋转90度 二.矩阵的初等变换1.两行(列)互换2.某行(列)乘上非零系数3.某行(列)乘上常数后加到另一行(列)上 三.经典应用1.求A到B,恰好经过k个点的路径数量 HDU2157代码:#in......
  • 访问者模式:如何实现对象级别的矩阵结构?
    今天我们先来看一个原理看似很简单,但是理解起来有一定难度,使用场景相对较少的行为型模式:访问者模式。一、模式原理分析访问者模式的原始定义是:允许在运行时将一个或多个操作应用于一组对象,将操作与对象结构分离。这个定义会比较抽象,但是我们依然能看出两个关键点:一个是运行时使......
  • 代码随想录算法训练营,29日 | 704. 二分查找,27. 移除元素,977.有序数组的平方,209.长度最
    数组基础文档讲解︰代码随想录(programmercarl.com)1.连续空间、相同类型元素2.元素只能覆盖3.二维数组的地址连续吗(C++连续,Java不连续)704.二分查找题目链接:704.二分查找文档讲解︰代码随想录(programmercarl.com)视频讲解︰二分查找日期:2024-08-29思路:第一反应是想到二分查......
  • Day07_0.1基础学习MATLAB学习小技巧总结(7)——矩阵算数运算
    利用暑假的时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。素材来源“数学建模清风”特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移......
  • 乘法|python矩阵基本运算(学习笔记二)
    在前述文章中,我们已经知道,python通过使用numpy模块,创建矩阵形数组至少可以采用两种方法。也即,通过array和matrix子模块分别创建,详情请参考以下链接。https://blog.csdn.net/weixin_44855046/article/details/141564179?spm=1001.2014.3001.5502进一步,上述链接指向文章也通过测......
  • 最大矩阵区间 题解
    题意简述给定\(n\)行\(m\)列矩阵\(A\)。对于每一行\(i\),选择非空区间\([l_i,r_i]\),满足\(\foralli\in[1,n)\),\([l_i,r_i]\)和\([l_{i+1},r_{i+1}]\)相交,即\(\max\{l_i,l_{i+1}\}\leq\min\{r_i,r_{i+1}\}\)。求所有选出区间的\(A_{i,j}\)值......
  • 加减法| python矩阵运算(学习笔记一)
    python的数学运算部分基本都在使用numpy模块,如果初次使用python,安装该模块最简单的办法就是:搜索框输入cmd打开命令提示符,输入以下代码等待安装即可。pipinstallnumpy如果不确定是否安装好,打开pycharm(此处默认为已经安装该软件),输入以下代码:importnumpyasnp之后即可定......
  • 搜索二维矩阵 II(LeetCode)
    题目编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。解题"""时间复杂度为O(m+n),其中m是矩阵的行数,n是矩阵的列数。"""defsearchMatrix(matrix,t......
  • 【从头写CAD】 转换矩阵类系列一,总说明及泛型类
    /*矩阵类编程思路总说明:平面CAD对象主要包括点(point)、线(line含线段、直线、射线,宽线、多段线)、平面形状(shap含矩形、圆形、椭圆、文字、图块实体、外部参照实体及各种标注等)。我们先用点(point)来说明矩阵功能。点(P),可以用向量(1,x,y)表示。一、如果点发生平移......
  • P7515 [省选联考 2021 A 卷] 矩阵游戏 题解
    DescriptionAlice有一个\(n\timesm\)的矩阵\(a_{i,j}\)(\(1\lei\len\),\(1\lej\lem\)),其每个元素为大小不超过\({10}^6\)的非负整数。Bob根据该矩阵生成了一个\((n-1)\times(m-1)\)的矩阵\(b_{i,j}\)(\(1\lei\len-1\),\(1\lej\lem-1\)),每个......