LGP5289口胡
考虑每个城市的 GF,乘起来就是答案的 GF。
很显然 \(C_0,C_1\) 钦定的只是某个维度的上下界,所以只需要记住一个派系和一个阵营的人数即可。
每个城市要求相同阵营的话,那么一个城市的 GF \(F(x)\) 可以写成 \(F(x)=y^kx^a\times F_1(x)+x^b\times F_2(x)\)。
注意到这是一个二维背包,如果直接算的话将会收获 \(O(nM^2)\) 的好成绩。
看一眼数据范围有 \(s_i\leq 10,k\leq 30\),考虑在这里动手脚。
卷一个 \(\prod_{i=1}^{10}(1+x^i)^{f_i}\) 非常容易,对于每个 \(1+x^i\) 使用类似背包的方法即可 \(O(10M)\)。这一部分复杂度为 \(O(k10M^2)\)
注意到 \(F_1(x)\) 和 \(F_2(x)\) 存在公因式,可以将其提出来然后当做无限制的处理。剩下的 \(y^kF_1(x)+F_2(x)\)。这里的 \(F_1(x),F_2(x)\) 的总次数只有 \(\sum s_i\),可以单独拉出来使用背包处理。
最后还有一个卷积,使用前缀和即可。
单次复杂度 \(O(sk^2M+nM)\)。