2011年省赛热身3解题报告

2011省赛热身3-by helihui

 
我贡献下这个题目的思路 学习母函数的话用此题当扩展不错。
题目意思描述下:
   此题问你同时抛出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)这种式子模拟出来就好了。

为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.