[海军国际项目办公室]生之花
Posted StaroForgin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[海军国际项目办公室]生之花相关的知识,希望对你有一定的参考价值。
生之花
S
Y
D
e
v
i
l
\\rm\\color{black}{S}\\color{red}{YDevil}
SYDevil出的恶心题,题面也太臭了。
题目描述
这里略去一张奈亚子。
题解
不得不说,手*魔鬼写的题面真的太恶臭了。
首先,对于
f
(
A
,
n
)
f(A,n)
f(A,n)的转移,我们很容易想到背包上。
我们定义
d
p
i
,
j
dp_{i,j}
dpi,j前
i
i
i个中选了
j
j
j个加入我们的函数转移的所有方案的函数值之和,显然,转移中还会用到选择的总方案,所以我们还需记录
g
i
,
j
g_{i,j}
gi,j表示选择函数转移的方案数。
容易得到转移方程式,
d
p
i
,
j
=
a
d
p
i
−
1
,
j
−
1
+
d
p
i
−
1
,
j
+
b
g
i
−
1
,
j
dp_{i,j}=adp_{i-1,j-1}+dp_{i-1,j}+bg_{i-1,j}
dpi,j=adpi−1,j−1+dpi−1,j+bgi−1,j
g
i
,
j
=
g
i
−
1
,
j
−
1
+
g
i
−
1
,
j
g_{i,j}=g_{i-1,j-1}+g_{i-1,j}
gi,j=gi−1,j−1+gi−1,j
这样的话单次询问是
O
(
n
2
)
O\\left(n^2\\right)
O(n2),明显是可以优化的。
我们可以将我们的带
x
x
x的部分与不带
x
x
x的部分分别计算,分别记作
f
a
i
,
j
fa_{i,j}
fai,j与
f
b
i
,
j
fb_{i,j}
fbi,j。
f
a
fa
fa中只记录
x
x
x的系数,
f
b
fb
fb记录不带
x
x
x的部分的大小。
显然,最后的答案等于
x
f
a
+
f
b
xfa+fb
xfa+fb,转移也比较好想,
f
a
i
,
j
=
a
f
a
i
−
1
,
j
−
1
+
f
a
i
−
1
,
j
,
f
b
i
,
j
=
a
f
b
i
−
1
,
j
−
1
+
f
b
i
−
1
,
j
+
b
g
i
−
1
,
j
−
1
fa_{i,j}=afa_{i-1,j-1}+fa_{i-1,j},fb_{i,j}=afb_{i-1,j-1}+fb_{i-1,j}+bg_{i-1,j-1}
fai,j=afai−1,j−1+fai−1,j,fbi,j=afbi−1,j−1+fbi−1,j+bgi−1,j−1
最后可以用差分求出我们询问的区间。
显然,上面的转移过程可以通过矩阵进行优化。
我们可以将第一维去掉,记
f
i
f_{i}
fi表示
(
f
a
i
,
f
b
i
,
g
i
)
\\left(fa_{i},fb_{i},g_{i}\\right)
(fai,fbi,gi)。
当我们加入
(
a
j
,
b
j
)
(a_{j},b_{j})
(aj,bj)时有转移矩阵,
A
j
=
(
a
j
,
0
,
0
0
,
a
j
,
0
0
,
b
j
,
1
)
A_{j}=\\left(\\begin{array}{cc}a_{j},0,0\\\\0,a_{j},0\\\\0,b_{j},1\\end{array}\\right)
Aj=⎝⎛aj,0,00,aj,00,bj,1⎠⎞,表示我们我们增加一个时改变的方案。
显然,转移是
f
i
=
A
j
f
i
−
1
+
I
f
i
f_{i}=A_{j}f_{i-1}+If_{i}
fi=Ajfi−1+Ifi
由于我们必须维护选择的点的个数这一维,所以我们必须将
A
A
A与
I
I
I的转移分开,维护所有的
F
i
F_{i}
Fi,但我们有没有更简洁的维护方法呢?
其实有了上面的式子,是很容易向生成函数上靠的。
定义
F
=
∑
f
i
x
i
F=\\sum f_{i}x^i
F=∑fixi,每次转移相当于给我们的
F
F
F乘上
(
I
+
A
j
x
)
(I+A_{j}x)
(I+Ajx)。
初始矩阵
f
0
=
(
1
,
0
,
1
)
f_0=\\left(1,0,1\\right)
f0=(1,0,1),答案是
∑
i
=
l
r
(
f
0
∏
(
I
+
A
j
x
)
)
[
x
i
]
\\sum_{i=l}^{r} (f_0\\prod(I+A_{jx}))[x^i]
∑i=lr(f0∏(I+Ajx))[xi]
显然,我们目标的多项式
f
0
∏
(
I
+
A
j
x
)
f_0\\prod(I+A_{jx})