首页 > 代码库 > HDU 1521 指数型母函数

HDU 1521 指数型母函数

技术分享

 

方法一: DFS

方法二:生成函数

每个数可以重复一定次数,求排列组合数,这是裸的指数型生成函数;

技术分享
 1 #include <bits/stdc++.h> 2  3 using namespace std; 4  5 double c1[15],c2[15]; 6 int a[15]; 7 int num[15]; 8  9 10 int main() {11 12     a[0] = 1;13     for(int i=1; i<13; i++)14         a[i] = a[i-1]*i;15 16     int n,m;17     while(scanf("%d%d",&n,&m)!=EOF) {18 19         memset(c1,0,sizeof(c1));20         memset(c2,0,sizeof(c2));21         22         for(int i=1; i<=n; i++)23             scanf("%d",&num[i]);24 25         for(int i=0; i<=num[1]; i++)26             c1[i] = 1.0/a[i];27 28         for(int i=2; i<=n; i++) {29 30             for(int j=0; j<=m; j++) {31 32                 for(int k=0; k<=num[i]&&j+k<=m; k++)33                     c2[j+k] +=c1[j]/a[k];34             }35             memcpy(c1,c2,sizeof(c2));36             memset(c2,0,sizeof(c2));37         }38 39         printf("%.0lf\n",c1[m]*a[m]);40 41     }42 43     return 0;44 }
View Code

 

HDU 1521 指数型母函数