组合数学
指数型母函数问题
引例:假设有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 %100

"红色病毒"问题

http://acm.hdu.edu.cn/showproblem.php?pid=2065

3053796 2010-10-09 23:23:27 Accepted 2065 0MS 184K 741 B G++

 代码:

 

代码
1 #include <stdio.h>
2  int main()
3 {
4 int t,i;
5 __int64 n;
6 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};
7 int b[20]= {20,72,72,56,60,12,92,56,0,52,12,56,40,92,32,56,80,32,52,56};
8 /*可以用for(j=4;j<=30;j++)
9 a[j]=((int)(pow(4,j-1)+pow(2,j-1)))%100;
10 求出
11 */
12 while (scanf("%d",&t)!=EOF)
13 {
14 if (t==0)
15 return 0;
16 for (i=1;i<=t;i++)
17 {
18 scanf("%I64d",&n);
19 if (n<=22)
20 printf("Case %d: %d\n",i,a[n]);
21 else
22 {
23 n=(n-3)%20;
24 printf("Case %d: %d\n",i,b[n]);
25 }
26
27 }
28 printf("\n");
29 }
30 return 0;
31 }
32
33  

 

posted on 2010-10-10 09:49  role  阅读(1111)  评论(0编辑  收藏  举报