HDU

来源:互联网 发布:关于网络暴力的调查 编辑:程序博客网 时间:2024/05/22 06:15

题意:给你n个物品和他的数量,求从这些物品中取出m个物品的排列

题解:指数型母函数模板题

AC代码:

#include<stdio.h>#include<string.h>double f[15];int main(){    int i,j,k,n,m,num[15];    double c1[15],c2[15];    f[0]=f[1]=1;    for(i=2;i<=10;i++)        f[i]=f[i-1]*i;    while(scanf("%d%d",&n,&m)!=EOF)    {        for(i=1;i<=n;i++)            scanf("%d",&num[i]);        for(i=0;i<=10;i++)            c1[i]=c2[i]=0.0;        for(i=0;i<=num[1];i++)            c1[i]=1.0/f[i];        for(i=2;i<=n;i++)        {            for(j=0;j<=m;j++)            {                for(k=0;k<=num[i]&&j+k<=m;k++)                {                    c2[j+k]=c2[j+k]+c1[j]/f[k];                }            }            for(j=0;j<=m;j++)            {                c1[j]=c2[j];                c2[j]=0;            }        }        printf("%.0lf\n",c1[m]*f[m]);    }    return 0;}


原创粉丝点击