我们使用类似子集卷积的技巧,集合幂级数 exp 就变成了要求出下面的这么一个 g:
fk,S=∣T1∣+∣T2∣+⋯+∣Tk∣=∣S∣,T1∪T2∪⋯∪Tk=S∑i=1∏kaTigS=k=0∑∣S∣k!fk,S
并起来恰好等于的限制不好处理,我们像做 OR-FWT 时一样,做个高维前缀和,使得每个 Tk 之间相互独立,这样就可以转化成正常的 exp 了;最后再差分回去。
f′k,S=Ti⊆S,∣T1∣+∣T2∣+⋯+∣Tk∣=∣S∣∑i=1∏kaTiF′S(x)=T⊆S∑aTx∣T∣G′S(x)=k=0∑∣S∣k!F′Sk=exp(F′S)
求出所有的 F′S 可以 O(2nn2) 完成,那么对于每一个 S 都暴力 O(n2) exp 即可求出 G′。最后差分回去即可得到 G,有 gs=[x∣S∣]GS(x)。