常系数线性齐次递推新理解

如果我们要求\(f_n\),我们事实上可以把\(f\)手动展开
如果\(f\)是斐波那契递推数列,则\(f_5=f_4+f_3=2f_3+f_2=3f_2+2f_1=5f_1+3f_0\)
\(5f_1+3f_0\)这事实上就可以直接按照\(a\)求了。
考虑列出每次取模数列的生成函数,求\(x^n\mod p(x)\)
\(p\)是一个多项式。
发现\(p(x)=x^k-p_1x^{k-1}+...-p^kx^0\)
取模的过程事实上就是拿多项式的最高次项更新后面的项,系数为\(p\)数组内元素。
用多项式乘法实现快速取模。
\(x^n\)用经典的倍增求。
这种做法理解起来比较简单。

例题1:NOI2017 泳池

例题2:THUSC2017 如果奇迹有颜色

例题3:prophecy
题目的多项式非常像线性递推。
考虑把矩阵乘法内的\(+\)替换成xor,\(*\)替换成and,发现矩阵不满足交换律,但是满足结合律。
考虑如何实现多项式操作。
多项式乘法就是把\(+\)替换成xor,\(*\)替换成and所得到的乘法
多项式取模只有加法,乘法操作。
单位元可以设置成\(2^{32}-1\)
例题4:CF865G flowers and chocolate
花的OGF:\(A(x)=(\sum_{x^{p_i}})^N\)
巧克力的生成函数:\(B(x)=\frac{1}{1-\sum_{x^{c_i}}}\)
根据样例给的提示,我们要求花瓣有\(i\)个的方案数:\(\sum_i(A(x)[x^i])(B(x)[x^i])\)
如果我们知道了\(i\),考虑\(B\)的实际意义,显然是背包dp。
\(f_i\)表示买了\(i\)块巧克力,显然有转移\(f_i=\sum_jf_{i-c_j}\)\(f\)的OGF就是\(B\)
\(f\)可以常系数线性齐次递推求 ,\(B(x)[x^i]=x^i\mod P(x)\)\(P\)是特征多项式。
我们需要枚举\(A(x)\)的每一项求出答案,这太慢了。
我们要求的:\(A(x)[x^i]\)乘以\(B(x)[x^i]\),就是\(i\)\(c\)拼接成的方案数。
发现\(\mod P(x)\)事实上是线性的,也是可乘的。
根据常系数线性齐次递推的快速算法的意义,考虑手动展开\(A\),把\(A(x)[x^v]\)展开成若干项\(b\)使得\(b_i(B(x)[x^{\max(c_i)-i}])=\)答案。
这可以先求出所有\(x^{p_i}\mod P(x)\)的和,然后\(N\)次方。
求出\(B(x)\)\(\max(c_i)\)可以背包。
感觉根据常系数线性齐次递推的快速算法的意义展开比较巧妙。
例题5:codechef TRIPWAYS

例题6:shlw loves matrix II

例题7:「LibreOJ β Round #7」匹配字符串
转化后,变为计算\(s_i=2*s_{i-1}-s_{i-m-1}\)
这事实上是计算dp数组的前缀和
显然能用常系数线性齐次递推的经典算法优化。
下面有\(3\)种另一种求解\(s\)的方法,可以推出相同的结果。
1.OGF,列出\(s\)的OGF \(F(x)\)
\(F(x)=2xF(x)-x^{m+1}F(x)+1\)
\(F(x)=\frac{1}{1-(2x-x^{m+1})}\)
\(G(x)=\sum_{i=0}^mx^i2^i\)\(F(x)=\sum_{i\geq 1}(2x-x^{m+1})^i\)
\(F(x)[x^n]\)事实上可以枚举\(i\)\([x^n](2x-x^{m+1})^i=[x^{n-i}](2-x^m)^i\)是确定的。
只有\(n-i\mod m=0\)时才有意义,设\(v=\frac{n-i}{m}\)值是\((-1)^v2^{i-v}C_i^v\)
2.组合意义
\(s\)的意义相当于:一个图,设从\(0\)\(n\)的路径的权值为它走过的边的权值的乘积。
答案等于走到\(n\)的所有路径的权值和。
图的构造方法:\(i->i+1\)连边权为\(2\)\(i->i+m+1\)连边权为\(-1\)的边。
枚举选了多少个\(-1\),答案是
\(\binom{n-k*x+x}{x}*2^{n-k*x}*(-1)^{x}\)
3.容斥
这个公式等同于\(f_i=f_{i-1}+...+f_{i-k+1}\)
这等同于有序选择重量\(\le k\)的物品装进背包的方案数。
考虑枚举选择了多少个重量\(\geq k\)的物品。
则问题转化成了使用若干个重量任意的物品填充背包的方案数。
\(n\)中间每个元素间都放置\(n-1\)个隔板,则每个隔板可以拆/不拆,方案数为\(2^{n-1}\)
乘上重量\(\geq k\)的物品在元素序列的选择方案数,得到答案就是\(\binom{n-k*x+x}{x}*2^{n-k*x}*(-1)^{x}\)
时间复杂度\(O(n^{\frac{2}{3}})\)
例题8:loj3353

posted @ 2021-05-15 18:02  celerity1  阅读(181)  评论(0)    收藏  举报