设为首页 加入收藏

TOP

SRM 626 D1L1: FixedDiceGameDiv1,贝叶斯公式,dp
2015-07-24 05:49:48 来源: 作者: 【 】 浏览:4
Tags:SRM 626 D1L1: FixedDiceGameDiv1 贝叶斯 公式

?

用到了概率论中的贝叶斯公式,而贝叶斯公式中需要用到的概率需要用dp方法求解。

代码:

?

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include
                 #include 
                 
                   #include 
                  
                    #include 
                   
                     #include 
                    
                      #include 
                     
                       #include 
                      
                        #include 
                       
                         using namespace std; #define CHECKTIME() printf(%.2lf , (double)clock() / CLOCKS_PER_SEC) typedef pair
                        
                          pii; typedef long long llong; typedef pair
                         
                           pll; #define mkp make_pair /*************** Program Begin **********************/ const int MAX_SCORE = 50 * 50; class FixedDiceGameDiv1 { public: double dp1[MAX_SCORE + 1], dp2[MAX_SCORE + 1]; // dp[i]: roll a b-sieded dice 最后总得分为i的概率 void calc(int a, int b, double dp[]) { for (int i = 0; i < MAX_SCORE + 1; i++) { dp[i] = 0.0; } dp[0] = 1.0; for (int i = 0; i < a; i++) { for (int j = a * b; j >= 0; j--) { if (dp[j] == 0) { continue; } for (int k = 1; k <= b; k++) { dp[j + k] += dp[j] / b; } dp[j] = 0; } } } double getExpectation(int a, int b, int c, int d) { double res = 0.0; calc(a, b, dp1); calc(c, d, dp2); // 贝叶斯公式 double up = 0, down = 0; for (int i = a; i <= a * b; i++) { for (int j = 0; j < i; j++) { up += dp1[i] * dp2[j] * i; down += dp1[i] * dp2[j]; } } if (down == 0) { return -1; } res = up / down; return res; } }; /************** Program End ************************/ 
                         
                        
                       
                      
                     
                    
                   
                  
                 
               
              
             
            
           
          
         
        
       
      
     
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 10951 - Polynomial GCD(数论.. 下一篇CodeForces 19B Checkout Assista..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: