
矩阵乘法
qq_20340417
这个作者很懒,什么都没留下…
展开
-
走格子
题意(原题): 一排n个格子,每步可以走1-k个格子。求走到最后一个格子的方案数。 k<=10,n<=2^31-1 思路: 矩阵乘法。 比如,n=5,k=2的时候序列为[1 2 4 8 15]。 解式子: [?]x[1]=[2] [?]..[2]..[3] 大概就是这样。小数据不能体现出规律,自己试着解诸如k=3,k=4的时候就能发现第一个矩阵的规律。 将此矩阵^n后再乘以一个竖原创 2017-10-27 11:16:58 · 269 阅读 · 0 评论 -
矩阵乘法总结
基础原理: 1.矩阵快速幂 例题:矩阵无限方 2.计算图从点A至B长度为k的路径条数 例题:多少条路呢实际应用: 1.对多个对象进行同一批操作 具体方式视每个操作为一个矩阵,将所有操作乘起来作为一个矩阵后,对每个对象乘以这个矩阵。 例题: 点的变换 成群的细菌 2.快速求出递推式某一项 设矩阵a*当前某(多)项=接下来某(多)项,则需要求第几项,将矩阵^n-1后再乘以第一项即可。原创 2017-10-27 13:55:49 · 214 阅读 · 0 评论 -
点的变换
题意(原题): 给出n个点,m个操作。 对每个点都进行这m个操作。 操作有平移、翻转、放大、旋转。 n<=10000,m<=1000000 思路: 暴力肯定会超时。 把每个操作都当成一个矩阵,再把这些操作都乘起来,再分别乘以每个点即可。 手推容易算出。 代码:#include<cstdio> #include<cstdlib> #include<cstring> #include<原创 2017-10-27 14:32:03 · 228 阅读 · 0 评论 -
矩阵无限方
题意: 给出一个矩阵A,求A^x。 思路: 把矩阵当作整数进行快速幂。 代码:#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #define GETMOD %1000000007 #define LL long long using namespace std; struct node { in原创 2017-10-27 14:35:28 · 409 阅读 · 0 评论 -
矩阵幂级数
题意(原题): 给出矩阵A,求A+A^2…A^k。 思路: 手推一下,即可算出A+A^2…A^k = A+A^2…+A^k/2+A^k/2(A+A^2…+A^k/2)。 二分+矩阵快速幂即可。 注意奇数的时候多加一个A^k。 代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #define GETMOD原创 2017-10-27 14:41:47 · 2050 阅读 · 0 评论 -
成群的细菌
题意(原题): n个数,m个操作,操作分6种,时间t。每刻进行一个操作,循环进行。 求最后每个数的值。 操作分别有清空、翻多倍、给另一个数加上某数的值、清空某数并给另一个数加上某数的值、第i个数的值变为第i+1个的值(n变为1的值)。 思路: 类似点的变换但还需要用到矩阵快速幂。 代码: #include<cstdio> #include<cstdlib> #include<cstring>原创 2017-10-27 14:51:24 · 262 阅读 · 0 评论 -
斐波那契数列
题意(原题): 求斐波那契数列第n项模10^9+7的值。n<=2^31-1 思路: 由于n很大,所以不能暴力。 考虑矩阵乘法。 [ 0 1 ] x [ 2 ] = [ 3 ] [ 1 1 ] …[ 3 ] … [ 5 ] 那么把求出第一个矩阵的n-1次方后乘以[ 0 ]即可得出结果。 …………………………………………………………[ 2 ] 矩阵乘法的时候别忘记了模。原创 2017-10-27 10:42:18 · 520 阅读 · 0 评论