常系数线性齐次递推新理解
如果我们要求fn,我们事实上可以把f手动展开
如果f是斐波那契递推数列,则f5=f4+f3=2f3+f2=3f2+2f1=5f1+3f0
5f1+3f0这事实上就可以直接按照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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· Tinyfox 简易教程-1:Hello World!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!