Atcoder abc297
https://atcoder.jp/contests/abc297/tasks
Ex - Diff Adjacent
正整数序列,和为N, 没有相邻元素相等
求所有满足的序列的长度 的和 mod 998244353
n 2e5
我的思路
~~2e5 打表啊 ~~
f(m,n) = 长度为m,和=n,满足没有相邻的方案数
ans(n) = sum m f(m,n)
g(m,n,v) = 长度为m, 和=n, 最后一个数为v, 满足没有相邻相同的方案数
f(m,n) = sum g(m,n,1…)
g(1,n,n) = 1
g(1,n,!=n)=0
g(m,n,v) = sum g(m-1,n-v, != v)
注意到转移和m无关, 所以相当于初始矩阵经过 m 次矩阵乘法以后得到的
1 | 初始(1行n^2列) |
然而直接的话,矩阵大小是((n^2)^2) 因为转移每次 都并不是行列对齐
n^2都不行,更别说n^4还要乘法了
而注意到最左和最右的两个行/列矩阵,非零元不超过n
能否靠这个简化
另一些思路,有容斥相邻位置,但是2^{位置}次方吗?
不要等于,换成 f(=n) = f(<=n) - f(<= n-1)
中间想拆成生成函数表示,但是没有拆成功
长度之和 就是每个位置贡献1, 能不能拆
虽然11不能相邻,但是12间隔还是长度能达到 2n/3