我贡献下这个题目的思路 学习母函数的话用此题当扩展不错。
题目意思描述下:
此题问你同时抛出d个骰子 而每个骰子是会抛出点数 (“d10 “ 就是说能抛出1-10点 )
然后问你 得到某个点数的概率 也就是所有的点数出现的次数是“d”后数相乘 然后只要用母函数算出给定点数会有几次就好了,然后想除就是答案。
这里是骰子都抛出的。
杭电ppt里的例子都是可以单独一个的,像给你10 20 50面值的 可以组成50元 有多少种。那么50面值直接就是一种就可以了,但这里是要每个骰子点数都取一次
num[]数组保存每个骰子的最大点数
for(i=1;i<=num[0];i++)
{
c1[i]=1;
c2[i]=0;
}
for(i=1;i<n;i++)
{
for(j=1(所以这里是1开始);j<=num[i];j++)
{
for(k=1;k+j<=x;k++)
{
if(c1[k]==0) //这里也是防止掷骰子 算的时候不是所有骰子点数相加出来的点数
continue;
c2[j+k]+=c1[k];
}
}
for(j=0;j<=x;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
上面是母函数核心代码。
其实就是用(x^1+x^2+...+x^n)*(x^1+x^2+...+x^n)这种式子模拟出来就好了。