HDU1521-指数母函数

指数型母函数相关知识请查看书!!

#include<stdio.h>
#include<string.h>
#define nmax 15
int num[nmax];
double res[nmax], fac[nmax], temp[nmax];
void init(int n)   //先算好所有阶乘!最多也只到10!    打好表!
{
    int i;
    fac[0] = 1;      //0的阶乘为1哦!
    for (i = 1; i <= n; i++) 
	{
        fac[i] = fac[i - 1] * i;
    }
}
int main() 
{
    int i, j, k, n, m;
    while (scanf("%d %d", &n, &m) != EOF) 
	{
        init(n); //先计算阶乘
        for (i = 0; i < n; i++) 
		{
            scanf("%d", num + i);
        }
        memset(res, 0.0, sizeof(res));
        memset(temp, 0.0, sizeof(res));
        for (i = 0; i <= num[0]; i++) 
		{
            res[i] = 1.0 / fac[i];       //①式
        }
        for (i = 1; i < n; i++)    //res和第i个多项式相乘
		{
            for (j = 0; j <= n; j++) //res多项式的每一项j
			{
                for (k = 0; (k <= num[i]) && (k + j <= n); k++)  //第i个多项式的每一项k (两个限制条件要注意)
				{
                    temp[j + k] += res[j] / fac[k];  //②式
                }
            }
            for (j = 0; j <= n; j++) 
			{
                res[j] = temp[j];     //把临时的返回给res,重构一个多项式.
				temp[j] = 0;          //临时的清零。
            }
		
        }
        printf("%.0lf\n", res[m] * fac[m]);//③
    }
    return 0;
} 
/*
①②式是这么个过程:如①式中有 x^2/2! 到②式时 x^5的系数==(x^2/2!)*(x^3/3!)==((x^5)/(2!3!)) 

注意1/(2!3!)整体为x^5的系数。所以③式 *fac[m]的原因就是为了得到:去除阶乘的系数!!

而这个才是我们需要的
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值