题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4161 还是不能理解矩阵…… 关于不用矩阵理解的方法:https://blog.csdn.net/joker_69/article/details/80869814 关于这道题:https://blog.csdn.net/sdfzyhx/article/details/63697273 现在只会 O(k2logn) 的做法. 很多题解的写法是快速幂到多项式的 n-(k-1) 次,用递推式暴力…
Description 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. Solution 常系数线性齐次递推 首先 \(A\) 的特征多项式是 \(x^k-\sum_{i=1}^{k}a_i*x^{k-i}\) 根据Cayley-Hamilton定理可以得到 \(f(A)=0\) \(A^n=A^n\mod f(A…
并不会递推,不过板子挺好背的,只要是类似的递推都能用,但是注意c数组不能使负数 如果除了递推还有常数项的话,就用f[i]-f[i-1]的方式消掉常数项(然后多一个f[i-1]的项) #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; const int N=4005,mod=1000000007; int n,m,a[N],ans…
矩阵乘法递推的新姿势. 叉姐论文里有讲到 利用特征多项式进行递推,然后可以做到k^2logn #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i>=k;--i)…
题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大合法矩形面积 <= lm.其中第 j 行及以下的部分的贡献是 1 而不是 q 的几次方. 那么有 \( dp[i][j]=dp[i][j+1]*p^i + \sum\limits_{k=1}^{i}dp[k-1][j+1]*p^{k-1}*(1-p)*dp[i-k][j] \) 注意到当 i>k…
如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 Matrix模板 poj_2118_Firepersons,my_ac_code 简单的测试 None 代码模板 /* * TIME COMPLEXITY:O(n^3log(t)) * PARAMS: * a The constant array. * b The initial array. * n The length of array. * t The iterator's value. * * MATRIX M…
给定数列前k项\(h_0...h_{k-1}\),其后的项满足:\(h_i=\sum_{i=1}^kh_{i-j}a_i\),其中\(a_1...a_k\)是给定的系数,求\(h_n\) 数据范围小的时候: ​ 做法一:暴力\(O(nk)\)的DP ​ 做法二:矩阵快速幂. 记\(H_i=\begin{bmatrix}h_i&h_{i+1}&...&h_{i+k-1}\end{bmatrix}\). 则\(h_n\)是\(H_{n-k+1}\)的最后一项. \(H_{n-k+1}=…
Description 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. Input 第 1 行包含两个整数 n,k 第 2 行包含 k 个整数 a1,a2...ak 第 3 行包含 k 个整数 h1,h2...hk Output 一行一个整数 hn mod 1000000007 常系数线性齐次递推可转为多项式幂…
[BZOJ4161]Shlw loves matrixI (常系数齐次线性递推) 题面 BZOJ 题解 \(k\)很小,可以直接暴力多项式乘法和取模. 然后就是常系数齐次线性递推那套理论了,戳这里 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MOD 1000000007 #define MAX 5000 void add(int &x,int…
题目描述 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. 解法 一个显然的思路就是矩阵乘法,但这样的话显然超时. 实际上,我们还可以继续对这个矩阵乘法进行优化. 首先,由于这是常系数齐次线性递推式,简单来说就是: \[f_i=\sum_{j=1}^k a_i*f_{i-j}\] 然后,我们需要引进特征多项式这个概念…
常系数齐次线性递推 具体记在笔记本上了,以后可能补照片,这里稍微写一下,主要贴代码. 概述 形式: \[ h_n = a_1 h_{n-1}+a_2h_{n-2}+...+a_kh_{n-k} \] 矩阵乘法是\(O(k^3 \log n)\) 利用特征多项式可以做到\(O(k^2\log n)\) 特征多项式 特征值和特征向量 特征多项式 \[ f(\lambda) = \mid M - \lambda I\mid \] 是关于\(\lambda\)的\(n\)次多项式 根据\(Cayley-…
前言 嗯   我之前的不知道多少天看这个的时候到底在干什么呢 为什么那么..  可能大佬们太强的缘故 最后仔细想想思路那么的emmm 不说了  要落泪了 唔唔唔 前置 多项式求逆 多项式除法/取模 常系数齐次递推目的 求一个满足k阶齐次线性递推数列ai的第n项 即:  给出f1--fk,a0--ak-1求an N=1e9,K=32000 常系数齐次递推主要思路 emmm矩阵快速幂怎么样都应该会的 设转移矩阵为A,st=[a0,a1...ak-2,ak-1]为初始矩阵 显然an=(st*An)0…
[Luogu4723]线性递推(常系数齐次线性递推) 题面 洛谷 题解 板子题QwQ,注意多项式除法那里每个多项式的系数,调了一天. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAX 200000 #define MOD 998244353 inline int read() { int x=0;…
这里所有的内容都将有关于一个线性递推: $f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k - 1}$是已知的. BM是用于求解线性递推式的工具,传入一个序列,会返回一个合法的线性递推式,一个$vector$,其中第$i$项表示上式的$a_{i + 1}$. CH用于快速求解常系数齐次线性递推的第$n$项,我们先会求出一个特征多项式$g$,$g$的第$k$项是$1$,其余项中第$k - i…
[BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑答案至多为\(k\)的概率,再减去至多为\(k-1\)的概率就是最终的答案. 发现要求的东西必须贴着底边,所以对于每一列而言我们需要考虑的就是选定区间的最低的那个不安全的格子的行号,再乘上底边的长度. 所以考虑设\(f[n]\)表示底边长度为\(n\)的答案,即确定底边长度为\(n\)时,面积小于等…
[背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并不想理我并丢给我以下方法: \[ \text{Cayley-Hamilton} \] 下文会根据CH定理证明的思路证明,没有形式上使用特征系统,因为我也不会... 一句话就是求: \[ f_n=\sum_{i=1}^m c_if_{n-i} \mod 998244353 \] 但这个算法卡常,zsy说1e5估…
定义 若数列 \(\{a_i\}\) 满足 \(a_n=\sum_{i=1}^kf_i \times a_{n-i}\) ,则该数列为 k 阶齐次线性递推数列 可以利用多项式的知识做到 \(O(k\log k \log n)\) 求第 n 项. 如果给出前 k 项,想知道 \(f_i\) ,可以在 \(O(k^2)\) 的时间内求出. 求 \(f_i\) 有 Berlekamp Massey 算法和 Reeds Sloane 算法,具体算法思想是啥咱也不知道,咱只知道这东西放进去就能跑. 前者需…
Time Limit: 30 Sec  Memory Limit: 128 MB Description 给定矩阵 M,请计算 M^n,并将其中每一个元素对 1000000007 取模输出. Input 第 1 行包含两个整数 n,k,其中 n 使用二进制表示,可能含有前导零; 余下 k 行描述了一个 k * k 的矩阵 M. Output 输出题目描述中要求的矩阵,格式同输入. Sample Input 010 3 5 9 5 5 4 0 8 8 8 Sample Output 110 121…
Dylans loves sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5273 Description Dylans得到了N个数a[1]...a[N].有Q个问题,每个问题形如(L,R)他需要求出L−R这些数中的逆序对个数.更加正式地,他需要求出二元组(x,y)的个数,使得L≤x,y≤R且x<y且a[x]>a[y] Input 第一行有两个数N和Q…
题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<=1010^6. 思路:矩阵快速幂模板题,构造矩阵t: a b 矩阵ans: x1 x0 显然ans1=t×ans,ans1为: x2 x1 那么ansn=t^n*ans,ansn为: xn+ xn 所以用矩阵快速幂计算t^n,n很大,快速幂要用十进制倍增,对每一位的计算不能直接乘,还要用二进制的快速幂,不…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2005 分析:首先易得ans=∑gcd(x,y)*2+1 然后我就布吉岛了…… 上网搜了下题解,设f[i]表示gcd(x,y)=i的实数对的个数,那么ans=∑f[i]*i*2+1 在设g[i]表示i是(x,y)公约数的个数,则g[i]=[m/i]+[n/i] 那么由容斥原理可以得到f[i]=g[i]-∑f[i*j] (2<=j<min([m/i],[n/i])) 那么就倒推就gg了…… O…
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status][Discuss] Description Orez很喜欢玩游戏,他最近发明了一款硬币游戏.他在桌子的边缘上划分出2*n个位置并按顺时针把它们标号为1,2,……,2n,然后把n个硬币放在标号为奇数的位置上.接下来每次按如下操作:在任意两个硬币之间放上一个硬币,然后将原来的硬币拿走:所放硬币的正反面…
问了数竞的毛毛搞了一番也没太明白,好在代码蛮好写先记下吧. #include<bits/stdc++.h> using namespace std; ,mod=1e9+; int n,k,c[N],b[N],a[N],f[N],tmp[N],ans; inline void qmul(int *x,int *y) { ;i<k*;++i)tmp[i]=; ;i<k;++i) ;j<k;++j) tmp[i+j]=(tmp[i+j]+1ll*x[i]*y[j]%mod)%mod…
3727: PA2014 Final Zadanie Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 279  Solved: 121 Description 吉丽YY了一道神题,题面是这样的:“一棵n个点的树,每条边长度为1,第i个结点居住着a[i]个人.假设在i结点举行会议,所有人都从原住址沿着最短路径来到i结点,行走的总路程为b[i].输出所有b[i].”吉丽已经造好了数据,但熊孩子把输入文件中所有a[i]给删掉了.你能帮他恢复吗? Inpu…
http://www.lydsy.com/JudgeOnline/problem.php?id=1037 看来自己越来越弱了... 这些计数题设计的状态都很巧妙,,自己智商太低QAQ 和矩阵dp做的那题差不多,都是枚举当前点的情况然后开了一些维来维护从当前点向前延伸的一些状态. 设d[i,j,x,y]表示前i个男的前j个女的,x表示从当前点向前延伸得到的最大的男减女的差,y表示从当前点向前延伸得到的最大的女减男的差. 则d[i+1,j,x+1,max(y-1,0)]+=d[i,j,x,y],d[…
Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) freopen(s".in","r",stdin) #define N 60 #define ll long long #define mod p using namespace std; int k,r; long long n,p; struct matrix{ lo…
传送门 Sol 考虑要求的东西的组合意义,问题转化为: 有 \(n\) 种小球,每种的大小为 \(a_i\),求选出大小总和为 \(m\) 的小球排成一排的排列数 有递推 \(f_i=\sum_{j=1}^{n}f_{i-a_j}\) 常系数线性递推 求一个满足 \(k\) 阶齐次线性递推数列 \(f_i\) 的第 \(n\) 项 \[f_n=\sum\limits_{i=1}^{k}a_i \times f_{n-i}\] 给出 \(a_1...a_k\) 以及 \(f_0\) \(k\) 为…
P4723 [模板]常系数齐次线性递推 题目描述 求一个满足$k$阶齐次线性递推数列${a_i}$的第$n$项. 即:$a_n=\sum\limits_{i=1}^{k}f_i \times a_{n-i}$ 输入输出格式 输入格式: 第一行两个数$n$,$k$,如题面所述. 第二行$k$个数,表示$f_1 \ f_2 \ \cdots \ f_k$ 第三行$k$个数,表示$a_0 \ a_1 \ \cdots \ a_{k-1}$ 输出格式: 一个数,表示 $a_n \% 998244353$…
题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别有多少种分组方法. 答案对\(998244353\)取模. \(n\leq {10}^9,m<2^{19}\) 题解 因为\(k>n\)的项都是\(0\),所以我们钦定\(m\leq n\) 考虑DP. 记\(f_{i,j}\)为前\(i\)个球分为\(j\)组的方案数. \[ f_{i,j}=f…
原文链接www.cnblogs.com/zhouzhendong/p/Cayley-Hamilton.html Cayley-Hamilton定理与矩阵快速幂优化.常系数线性递推优化 引入 在开始本文之前,我们先用一个例题作为引入. 给定一个 \(n \times n\) 的矩阵 \(M\) , 求 \(M ^ k\) . \(n\leq 50, k\leq 10 ^ {50000}\) . 注意到 \(n\) 十分小,但是 $ \log k$ 非常大.如果使用传统的矩阵快速幂,时间复杂度为 \…