Hdu 1521 排列組合 —— 指數型母函式
阿新 • • 發佈:2021-01-24
技術標籤:數學
題意:
題解:
普通母函式是求組合問題,指數型母函式是求排列問題。那麼這道題的函式為:
∏
i
=
1
n
(
1
+
x
+
x
2
2
!
+
.
.
.
+
x
a
[
i
]
a
[
i
]
!
)
\prod\limits_{i=1}^{n}(1+x+\frac{x^2}{2!}+...+\frac{x^{a[i]}}{a[i]!})
i=1∏n(1+x+2!x2+...+a[i]!xa[i])
其實和普通母函式差不多
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=15;
ll fac[N],dp[2][N];
int a[N];
int main()
{
fac[0]=1;
for(int i=1;i<N;i++)fac[i]=fac[i-1]*i;
int n,m;
while(~scanf("%d",&n)){
scanf("%d",&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i] );
int f=0;
memset(dp[f],0,sizeof(dp[f]));
int top=0;
dp[f][0]=1;
for(int i=1;i<=n;i++){
int nt=min(m,top+a[i]);
memset(dp[f^1],0,sizeof(ll)*(nt+1));
for(int j=0;j<=nt&&j<=a[i];j++)
for(int k=0;k<= top&&k+j<=nt;k++)
dp[f^1][j+k]+=dp[f][k]*fac[j+k]/fac[j]/fac[k];
f^=1,top=nt;
}
printf("%lld\n",dp[f][m]);
}
return 0;
}