题面 HDU1521
依旧是多项式相乘 不过在乘的过程中多了个排列的操作
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
#define ll long long
#define Clear(a,b) memset(a,b,sizeof(a))
const int N=1234;
double c1[N],c2[N];
int num[N];
double FFF(int n)
{
double res=1;
for(int i=1;i<=n;i++)
res*=i;
return res;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
Clear(c1,0);
Clear(c2,0);
for(int i=0;i<=num[1];i++)
{
c1[i]=1.0/FFF(i);
}
for(int i=2;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
for(int k=0;k+j<=m&&k<=num[i];k++)
{
c2[k+j]+=c1[j]/FFF(k);
}
}
for(int l=0;l<=m;l++)
{
c1[l]=c2[l];
c2[l]=0;
}
}
printf("%.0lf\n",c1[m]*FFF(m));
}
return 0;
}