zoukankan      html  css  js  c++  java
  • [HDU4652] Dice

    扔一个有m个面的骰子,每个面有一个数字,这些数字互不相同,求连续扔到n个数相同的期望步数或连续扔到n个数不同的期望步数

    相同的:

      E[i]表示已经有i连续个相同,到达目标的期望步数

      E[i]=E[i+1]/m+(1-1/m)E[1].................... 1

      E[i+1]=E[i+2]/m+(1-1/m)E[1]................ 2

      1-2得 E[i]-E[i+1]=(E[i+1]+E[i+2])/m

      设s[i]=E[i]-E[i+1],

      则s[0]=E[0]-E[1]=1,s[i+1]=m*s[i],ans=sigma(s[i])(0<=i<n)  

    不同的:

      E[i]表示已经有i连续个不同,到达目标的期望步数

      E[i]=simga(E[j])/m+((m-i)/m)E[i+1],(1<=j<=i).................. 1

      E[i+1]=sigma(E[j])/m+((m-i-1)/m)E[i+2],(1<=j<=i+1)....... 2

      1-2得 E[i]-E[i+1]=(m-i-1)/m*(E[i+1]-E[i+2])

      设s[i]=E[i]-E[i+1],

      则s[0]=E[0]-E[1]=1,s[i+1]=m/(m-i-1)s[i],ans=sigma(s[i])(0<=i<n)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define maxn 1000005
     4 int T,op,n;
     5 double m,s[maxn];
     6 void solve0(){
     7     s[0]=1;
     8     double ans=s[0];
     9     for(int i=0;i<n-1;i++)
    10         s[i+1]=s[i]*m,ans+=s[i+1];
    11     printf("%.9lf
    ",ans);
    12 }
    13 void solve1(){
    14     s[0]=1;
    15     double ans=s[0];
    16     for(int i=0;i<n-1;i++)
    17         s[i+1]=m/(m-i-1)*s[i],ans+=s[i+1];
    18     printf("%.9lf
    ",ans);
    19 }
    20 int main(){
    21     scanf("%d",&T);
    22     while(T--){
    23         scanf("%d%lf%d",&op,&m,&n);
    24         if(op==0)solve0();
    25         else solve1();
    26     }
    27     return 0;
    28 }
    View Code

      

  • 相关阅读:
    第五章 项目范围管理
    一位华为IT总监的12大职场经验谈
    接到面试通知后该做什么
    经验借鉴:外包失败三条血泪经验分享
    项目范围管理收集需求
    绝对不能对老板说的十句傻话
    项目整合实施整体变更控制
    项目整合结束项目或阶段
    9招助你夺取更高职位
    IT人写好简历的原则与方法
  • 原文地址:https://www.cnblogs.com/Ngshily/p/5532709.html
Copyright © 2011-2022 走看看