#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
double dp1[15],dp2[15],a[15];
int v[15],num[15],n,m;
void solve()
{
for(int i=2;i<=n;i++)//从第二项开始
{
for(int j=0;j<=m;j++)
{
for(int k=0;k<=num[i]&&k*v[i]+j<=m;k++)
{
dp2[j+k*v[i]]+=dp1[j]/a[k*v[i]];
}
}
for(int j=0;j<=m;j++)
{
dp1[j]=dp2[j];
dp2[j]=0;
}
}
}
int main()
{
a[0]=1;
a[1]=1;
for(int i=2;i<=15;i++)
{
a[i]=i*a[i-1];
}//预处理阶乘
while(cin>>n>>m)
{
for(int i=1;i<=n;i++)
{
v[i]=1;
cin>>num[i];
}
memset(dp1,0,sizeof(dp1));
memset(dp2,0,sizeof(dp2));
//dp1[0]=1.0;
for(int i=0;i<=num[1];i++)//初始化第一项
{
dp1[i]=1.0/a[i];
}
solve();
double ans;
ans=dp1[m]*a[m];
printf("%.0lf\n",ans);
}
}
hdu 1521 指数型母函数
最新推荐文章于 2020-09-19 00:23:43 发布