[指数型生成函数] HDU 1521 排列组合

来源:互联网 发布:mac 软键盘 编辑:程序博客网 时间:2024/05/16 07:33

对每种物品建EGF

Ai(x)=i=0aixii!

然后[xm]Ai(x)即为答案
这个题直接做一个背包就好了 而且爆搜也能过?

#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;const int N=100;double f[2][N],fac[N];int n,m,a[N];int main() {  freopen("t.in","r",stdin);  freopen("t.out","w",stdout);  fac[0]=1; for (int i=1;i<=10;i++) fac[i]=fac[i-1]*i;  while (~scanf("%d%d",&n,&m)){    for (int i=0;i<n;i++) scanf("%d",&a[i]);    memset(f,0,sizeof(f));    int t=0;    for (int i=0;i<=a[0];i++)      f[t][i]=1.0/fac[i];    for (int i=1;i<n;i++,t^=1){      memset(f[t^1],0,sizeof(f[t^1]));      for (int j=0;j<=m;j++)    for (int k=0;k+j<=m && k<=a[i];k++)      f[t^1][j+k]+=f[t][j]/fac[k];    }    printf("%.0lf\n",f[t][m]*fac[m]);  }  return 0;}
0 0
原创粉丝点击