随笔分类 -  算法->数学->矩阵乘法

摘要:"【51nod】2590 持续讨伐" 挣扎着卡了卡常过了 记$dp[i][j]$为到第$i$位,和第$i$位相连的部分长度$x^{j}$乘上之前部分所有方案$x^{K}$总和 转移用二项式定理展开即可,若这位不选,可以有$dp[i + 1][j] = dp[i][K]$ 矩阵乘法优化一下,卡常用预处 阅读全文
posted @ 2019-06-19 14:02 sigongzi 阅读(169) 评论(0) 推荐(0)
摘要:LOJ 3098. 「SNOI2019」纸牌 显然选三个以上的连续牌可以把他们拆分成三个三张相等的 于是可以压$(j,k)$为有$j$个连续两个的,有$k$个连续一个的 如果当前有$i$张牌,且$i = j + k$ 那么可以$(j,k)\rightarrow (k,(i j k) \% 3)$ 可 阅读全文
posted @ 2019-06-13 11:15 sigongzi 阅读(190) 评论(0) 推荐(0)
摘要:LOJ 3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为$S,j$表示轮廓线为$S$,然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数然后乘上N就是不合法的方案 cpp include define fi first define se se 阅读全文
posted @ 2019-06-05 08:28 sigongzi 阅读(280) 评论(0) 推荐(0)
摘要:题解 就是线段树维护一下转移矩阵 分成两种情况,一种是前面有两个联通块,一种是前面有一个联通块 从一个联通块转移到一个联通块 也就是新加一列的三个边选其中两条即可 从一个联通块转移到两个联通块 不连竖着的那条边,横着的两条边转移一条短的即可 从两个联通块转移到一个联通块 新加的一列三个边全连上 从两 阅读全文
posted @ 2018-12-19 15:46 sigongzi 阅读(331) 评论(0) 推荐(0)
摘要:题解 Ca Fe Zn Se 显然我们既然初始矩阵就能通过线性变换变成单位矩阵,则该矩阵一定有逆 没有逆输出NIE 而且因为这些向量两两正交,则表示一个向量的时候表示方法唯一 那么我们求一个逆可以求出这个矩阵消成单位矩阵的线性表示,再拿第二个矩阵和逆矩阵相乘可以得到第二个矩阵每个行向量用第一个矩阵的 阅读全文
posted @ 2018-12-10 09:05 sigongzi 阅读(472) 评论(0) 推荐(1)
摘要:题解 简单分析一下,有$k$个环肯定是,我拆掉了$k 2$个,留最左两个,1步拆掉最左的,这个时候我还要把这$k 2$个环拼回去,拆一次$k 1$ 所以方案数就是$f[k] = f[k 1] + 2 f[k 2] + 1$ 然而太简单了,简单的都不是省选题了,所以他没让你取模= =,让你写FFT的高 阅读全文
posted @ 2018-12-08 22:16 sigongzi 阅读(217) 评论(0) 推荐(0)
摘要:题解 有毒吧 这题$O(n)$过不去 非得写$O((a + b)^3\log n)$的矩乘,同样很卡常 把$x$换成$n y$ 我们拆完式子发现是这样的 $\sum_{i = 0}^{a} ( 1)^{a + b i} y^{a i} n^{i} \binom{a}{i}$ 所以我们设$f[i][k 阅读全文
posted @ 2018-12-08 22:11 sigongzi 阅读(240) 评论(0) 推荐(0)
摘要:题解 把所有的数组一开始就FWT好然后再IFWT回去可以减小常数 从13s跑到0.7s…… 可以参照immortalCO的论文,感受一下毒瘤的动态动态DP 就是用数据结构维护线性递推的矩阵的乘积 由于所有轻儿子$F(z) + z^{0}$的乘积做除法太麻烦,我们用一个线段树维护每个点所有的轻儿子即可 阅读全文
posted @ 2018-10-03 13:19 sigongzi 阅读(626) 评论(0) 推荐(0)
摘要:题解 题中给的函数可以用矩阵快速幂递推 我们记一个数组dp[i](这个数组每个元素是一个矩阵)表示从1到i所有的数字经过拆分矩阵递推的加和 转移方法是 $dp[i] = \sum_{j = 0}^{i 1} dp[j] tr[j + 1][i]$ $tr[j][i]$表示矩阵的$[j,i]$组成的数 阅读全文
posted @ 2018-09-19 15:15 sigongzi 阅读(274) 评论(0) 推荐(0)
摘要:题解 点一个技能点叫特征方程 就是 $a_{n + 2} = c_1 a_{n + 1} + c_2 a_{n}$ $x^2 = c_1 x + c_2$ 解出两根来是$x_1,x_2$ 通项就是 $Ax_1^{n} + Bx_2^{n}$把第一项和第二项带入可以解出来A和B 然后为了得到通项是 $ 阅读全文
posted @ 2018-09-02 17:04 sigongzi 阅读(372) 评论(1) 推荐(0)
摘要:题解 令x = x t代换一下会发现 $\sum_{i = 0}^{n}a_i (x + t)^i = \sum_{i = 0}^{n} b_{i} x^{i}$ 剩下的就需要写高精度爆算了…… 代码 阅读全文
posted @ 2018-09-02 09:45 sigongzi 阅读(172) 评论(0) 推荐(0)
摘要:题解 压的状态是一个二进制位,我们规定1到n的数字互不相同是从小到大,二进制位记录的是每一位和后一个数是否相等,第n位记录第n个数和原串是否相等,处理出50个转移矩阵然后相乘,再快速幂即可 代码 cpp include define enter putchar('\n') define space 阅读全文
posted @ 2018-08-27 16:51 sigongzi 阅读(258) 评论(0) 推荐(0)
摘要:题解 矩阵乘法,注意需要快速乘 矩阵2 2 a c 0 1 代码 阅读全文
posted @ 2018-06-13 09:15 sigongzi 阅读(209) 评论(1) 推荐(0)
摘要:题解 在冬令营上听到冬眠的东西,现在都是板子了猫锟真的是好毒瘤啊(雾) (立个flag,我去thusc之前要把WC2018T1乱搞过去= =) 好的,我们可以参考猫锟的动态动态dp的课件,然后你发现你什么都看不懂(菜啊 但是我们仔细看一看,可以发现用数据结构维护矩阵,那么我们尝试构造一个矩阵 $\b 阅读全文
posted @ 2018-05-31 17:44 sigongzi 阅读(255) 评论(0) 推荐(0)