天天看點

指數型母函數模闆

題面 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 ;

}