題面 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=;
double c1[N],c2[N];
int num[N];
double FFF(int n)
{
double res=;
for(int i=;i<=n;i++)
res*=i;
return res;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<=n;i++)
scanf("%d",&num[i]);
Clear(c1,);
Clear(c2,);
for(int i=;i<=num[];i++)
{
c1[i]=/FFF(i);
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
for(int k=;k+j<=m&&k<=num[i];k++)
{
c2[k+j]+=c1[j]/FFF(k);
}
}
for(int l=;l<=m;l++)
{
c1[l]=c2[l];
c2[l]=;
}
}
printf("%.0lf\n",c1[m]*FFF(m));
}
return ;
}