zoukankan      html  css  js  c++  java
  • 算法提高---概率计算

    问题描述
      生成n个∈[a,b]的随机整数,输出它们的和为x的概率。
    输入格式
      一行输入四个整数依次为n,a,b,x,用空格分隔。
    输出格式
      输出一行包含一个小数位和为x的概率,小数点后保留四位小数
    样例输入
    2 1 3 4
    样例输出
    0.3333
    数据规模和约定
      对于50%的数据,n≤5.
      对于100%的数据,n≤100,b≤100.
    分析:注意到每个数([a,b])取到的概率p=1.0/(b-a+1),用dp[i][j]表示i个数的和为j,
    则得到如下的递推关系式dp[i][j]=dp[i-1][j-k](j-k>=(i-1)*a)+p(k)(k属于[a,b])
    且dp[1][a:b]=p
    #include <stdio.h> 
    
    double dp[101][100*100+1];//Max_n,Max_(n*b) 
    
    int main(){
        int n,a,b,x,i,j,k;
        scanf("%d%d%d%d",&n,&a,&b,&x);
        
        if(x < n*a || x > n*b)
            printf("0.0000
    ");
        else{
            //initial
            for(i=2;i<=n;i++)
                for(j=i*a;j<=i*b;j++)
                    dp[i][j] = 0.0;
            for(j=a;j<=b;j++)
                dp[1][j] = 1.0/(b-a+1);
            
            for(i=1;i<n;i++)
                for(j=i*a;j<=i*b;j++)
                    for(k=a;k<=b;k++)
                        dp[i+1][j+k] += dp[i][j]*1.0/(b-a+1);
            printf("%.4lf
    ",dp[n][x]);    
        } 
        return 0;
    }

    参考:http://blog.csdn.net/go_accepted/article/details/57105651

  • 相关阅读:
    希腊字母写法
    The ASP.NET MVC request processing line
    lambda aggregation
    UVA 10763 Foreign Exchange
    UVA 10624 Super Number
    UVA 10041 Vito's Family
    UVA 10340 All in All
    UVA 10026 Shoemaker's Problem
    HDU 3683 Gomoku
    UVA 11210 Chinese Mahjong
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/6444050.html
Copyright © 2011-2022 走看看