hdu 2065 "红色病毒"问题 (母函数)

点击打开链接

指数型母函数问题
引例:假设有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,…对应的指数型母函数。

  G(X)  =  ( 1+ x + x^2/2! + x^4/! + .. )^2      *  ( 1 + x + x^2/2! + x^3/3! +... )^2
  A, C 只能出现偶数或者不出现情况    B, D出现方式不限制    
 得:  x^n 项系数  a(n) =  (4^n+2*2^n)/(4*n!)
 求的:count=(4^n+2*2^n)/4 0

#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;
}


posted on 2012-10-22 13:19  Slege  阅读(120)  评论(0编辑  收藏  举报

导航