zoukankan      html  css  js  c++  java
  • 首个概率dp

    题目:

    问题描述
      生成n个∈[a,b]的随机整数,输出它们的和为x的概率。
    输入格式
      一行输入四个整数依次为n,a,b,x,用空格分隔。
    输出格式
      输出一行包含一个小数位和为x的概率,小数点后保留四位小数
    样例输入
    2 1 3 4
    样例输出
    0.3333
    数据规模和约定
      对于50%的数据,n≤5.   对于100%的数据,n≤100,b≤100.
    思路:
    dp[i][j]表示选择i个数,结果为j的概率;递推方程:dp[i][j]+=dp[i-1][j-k]*p;(a<=k<=b),p为选出一个数的概率
    代码:


    #include<iostream>
    using namespace std;
    double dp[101][10001]={0};
    int main()
    {
        int n,a,b,x,i,j,k,t;
        double p;
        while(cin>>n>>a>>b>>x){
                p=1.0/(b-a+1);
            for(i=1;i<=n;i++){
                t=min(x,i*b);
                for(j=1;j<=t;j++){
                    if(i==1){
                        dp[i][j]=p;
                    }
                    for(k=a;k<=b;k++){
                        dp[i][j]+=dp[i-1][j-k]*p;
                    }
                }
            }
            cout<<dp[n][x]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    5月16日 AJAX
    5月13日 Jquery基础
    5月13日 PDO封装
    会话控制练习
    文件上传
    会话控制
    注册审核
    练习
    三级联动
    AJAX之XML
  • 原文地址:https://www.cnblogs.com/ACWQYYY/p/4355312.html
Copyright © 2011-2022 走看看