题意:
给一堆东西和选的限制,求把背包装满的方案数。。
题解:
对于每种组合我们只关心每种食物的个数,故可以每一个组成对象构造一般性生成函数。
显然答案为所有食物的笛卡尔积,那么按照 OGF 定义直接函数相乘即可。
当然BZOJ的题也不是那么Naive的,一波推导可得拼接之后的函数 G(x)=x⋅(1−x)−4 ,下面讲讲这个函数 xn 系数的两种求法:
暴力展开法
首先有Taylor公式:
f(x)=∑i=0∞f(i)(x0)i!(x−x0)i
只需要求 f(n) 。
根据莱布尼茨公式,(u+v)(n)=∑i=0n(ni)u(i)v(n−i)
又因为 u(x)=x,v(x)=(1−x)−4 ,当 i 大于1 时, u(i)=0 ,只需要展开前两项即可。如果使用麦克劳林展开则只需展开第二项。
广义二项式定理
对于形如 (x+y)a 有如下展开:
(x+y)a=∑i=0∞(ai)xiyn−i
因为负数无阶乘定义,所以这里定义(ai)=Πki=1(a−i+1)k!那么直接展开即可。