随笔分类 - 矩阵乘法
摘要:HDU 1575Tr A 水题。直接矩阵快速幂后求对角线元素和。HDU 1757A Simple Math Problem 水题。公式非常容易推。HDU 2604Queuing 以mm结尾的只能由fm结尾的或者mm结尾的推来。以mf结尾的只能由mm结尾的推来,以fm结尾的只能由mf或者ff推来,以ff结尾的只能由mf推来。于是定义状态dp[i][j] 表示i位数以j状态结尾的数的个数。j=0,1,2,3分别表示以mm,mf,fm,ff结尾。于是可以得到dp方程: dp[i][0]=dp[i-1][2] + dp[i-1][0] dp[i][1]=dp[i-1][0] dp[i][2...
阅读全文
摘要:#include #include typedef long long LL;const int MAXN = 100 + 5;const LL mod = 10000007;struct Mat{ LL mat[MAXN][MAXN];}A, E; // 题目矩阵和单位矩阵int n;void Unit(Mat a){ for(int i = 0; i = mod) c.mat[i][j] %= mod; } } } } return c;}Mat ...
阅读全文
摘要:原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 矩阵乘法,得到递推公式,构造系数矩阵,然后进行快速幂。 View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int L, M; 5 6 struct mat 7 { 8 int m[4][4]; 9 mat()10 {memset(m, 0, sizeof m);}11 12 void init()13 {14 memset(m, 0, sizeof m...
阅读全文
摘要:原题传送:http://poj.org/problem?id=3233 两个二分:二分 k ,二分矩阵。 求Sn = A + A2 + A3 + … + Ak。 首先我们能矩阵二分快速幂计算出Ak,那么我们对S再进行二分: 当k % 2 != 0则计算Ak+S(k-1),当k % 2 == 0时计算S(k/2) * (Ak/2 + E),这样就可以在log(k)的时间里算出Sk。 ps:这题有两个地方要注意,否则可能会TLE 1. 用 unsigned int,不要 long long 2. 取模运算效率很低,矩阵乘法单个元素最大值不是很大的情况下先算出来再取一次模更好。Vi...
阅读全文