
矩阵乘法
jzq233jzq
这个作者很懒,什么都没留下…
展开
-
浅谈矩阵乘法
先来一段百科 矩阵乘法是一种高效的算法,可以把一些一维递推优化到log(n ),还可以求路径方案等,所以更是一种应用性极强的算法。矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。矩阵乘法看起来很奇怪,但实际上非常有用,应用也十分广泛。一个矩阵说穿了就是一个二维数组。一个n行m列的矩原创 2017-03-27 15:39:14 · 529 阅读 · 0 评论 -
图论矩乘——BZOJ1706/Luogu2886 [USACO07NOV]Cow Relays
题面:Luogu2886 BZOJ1706 这题是图论的矩阵乘法吧。。。 我们把矩阵快速幂的思想和floyd结合一下 这里的矩阵乘法应该来说已经不算矩乘了。。。 确切来说是把乘法部分换成了floyd 然后矩乘n次(和公交车路线差不多) 计算最短路即为答案 然后这题需要离散化一下(我不知道不离散化能不能过。。。)#include<bits/stdc++.h>using namespace std;原创 2017-05-02 13:43:26 · 473 阅读 · 0 评论 -
图论矩乘——BZOJ1297 [SCOI2009]迷路
题面:BZOJ1297 又是一题我称之为“图论矩乘”的好题 因为每条边的边权只有1~9,所以我们考虑拆点 把一个点一分为十,方便记录距离 比如从a到b有一条边权为c的边 那么我们先把a里的距离1~c的点全部连上1,然后将a里的c和b里的1连上一条边 这样就做到矩阵里所有点的权值都是1了 然后就可以矩阵快速幂优化了 最后输出答案的时候还要再搞一下起点和终点#include<bits/stdc++.h原创 2017-05-02 14:50:13 · 392 阅读 · 0 评论 -
矩乘——BZOJ3231/Luogu2461 [Sdoi2008]递归数列
题面:BZOJ传送门 洛谷传送门 这个递推式挺恶心的。。。 首先, 而且要求区间和(这个其实简单)我们差分一下就好了 那么我们构造矩阵递推式(要把前缀和也搞进去) 和noi2012的那题随机数生成器一样,我们还是可以通过结合律把前面的先算出来再把后面的乘上去,就变成了这样: 然后就可以矩阵快速幂解决了 ps:这题变量要全开long long,我调了一个上午。。。#include原创 2017-05-05 11:30:52 · 551 阅读 · 0 评论 -
矩乘——BZOJ2875/Luogu2044 [Noi2012]随机数生成器
题面:Luogu2044 BZOJ2875 很明显,这个递推式: X[n+1]=(aX[n]+c) mod m X[i]的值只与X[i-1]有关 所以我们可以很快构造出关于X,a和c的一个矩阵递推式 正确性显然 所以我们要求X[n],我们就按照这个递推式来做就好了 根据矩阵乘法支持结合律,我们可以先算出后面那个矩阵的n次 然后再把前面那个矩阵乘上去就好了 因为在计算相乘的过程中原创 2017-05-03 08:34:23 · 390 阅读 · 0 评论 -
图论矩乘——Luogu2233 [HNOI2002] 公交车路线
https://www.luogu.org/problem/show?pid=2233 这个矩阵和floyd很像,可以说就是floyd吧 就是说每条公交车路线为初始矩阵啦~(相邻的点,不过5不要考虑因为到达5停止了的) 他需要n次从1到5,那么矩阵快速幂n-1次就好了 注意是n-1次!!!坑点 输出1到5的即可#include<bits/stdc++.h>using namespace原创 2017-04-18 08:32:07 · 822 阅读 · 0 评论 -
循环矩乘——Luogu3746/BZOJ4870 [SHOI2017]组合数问题
题面:BZOJ4870 Luogu3746 第一次接触循环矩乘。。。 首先我们可以考虑DP,f[i][j]f[i][j]表示在i个物品中选取modkmodk下余j的方案数。 状态转移很好想,f[i][j]=f[i−1][j]+f[i−1][(j−1+k)modk]f[i][j]=f[i-1][j]+f[i-1][(j-1+k)mod k] 然后发现这个DP可以用矩乘优化,矩阵大概长这个样子:原创 2017-10-06 08:20:46 · 379 阅读 · 0 评论