指数型母函数问题
引例:假设有8个元素,其中a1重复3次,
a2重复2次,a3重复3次。从中取r个组合,,
这样,对于一个多重集,其中a1重复n1次,a2 重复n2次,…,ak重复nk次,
从中取r个排列的不同排列数所对应的指数型母函数为
G(x)=(1+x/1!+x^2/2!+…——x^n1/n1!)(1+x/1!+x^2/2!+…)…(1+x/1!+x^2/2!+…+x^n/n!)
定义:对于序列a0,a1,a2,…,函数
G(x)=a。+a1/1!*x+a2/2!*x^2+a3/3!*x^3…+ak/k!*x^k+…
称为序列a0,a1,a2,…对应的指数型母函数。
#include <stdio.h> int main() { int t,i; __int64 n; int a[23]={0,2,6,20,72,72,56,60,12,92,56,0,52,12,56,40,92,32,56,80,32,52,56}; int b[20]= {20,72,72,56,60,12,92,56,0,52,12,56,40,92,32,56,80,32,52,56}; while (scanf("%d",&t)!=EOF) { if (t==0) return 0; for (i=1;i<=t;i++) { scanf("%I64d",&n); if (n<=22) printf("Case %d: %d\n",i,a[n]); else { n=(n-3)%20 ; printf("Case %d: %d\n",i,b[n]); } } printf("\n"); } return 0; }