hdu 1521(标准的指数型母函数)

题意:就是求排列数,易理解~

分析:这是一道标准的指数型母函数题目,只要是知道如何避免重复的问题,那就是除以阶乘,这个在高中的时候排列组合中已经学到过,不过这个题目还是要注意下精度问题,开始的时候我是没注意好,导致一直错。建议看下这个资料:http://www.wutianqi.com/?p=2644,讲得还好~

代码实现:

#include<stdio.h>
#include<string.h>
double a[15];
void shezhi()
{
    int i;
    a[0]=a[1]=1;
    for(i=2;i<=10;i++)
        a[i]=a[i-1]*i;
}
int main()
{
    int i,j,k,n,m,num[15];
    double c1[15],c2[15];
    shezhi();
    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]=0.0;
            c2[i]=0.0;
        }
        for(i=0;i<=num[1];i++)
        {
            c1[i]=1.0/a[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]/a[k];
                }
            }
            for(j=0;j<=m;j++)
            {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        printf("%.0lf\n",c1[m]*a[m]);
    }
    return 0;
}

 

posted on 2013-04-16 21:40  后端bug开发工程师  阅读(1322)  评论(0编辑  收藏  举报

导航