zoukankan      html  css  js  c++  java
  • Light OJ 1317 Throwing Balls into the Baskets 概率DP

    n个人 m个篮子 每一轮每一个人能够选m个篮子中一个扔球 扔中的概率都是p 求k轮后全部篮子里面球数量的期望值

    依据全期望公式 进行一轮球数量的期望值为dp[1]*1+dp[2]*2+...+dp[n]*n 记为w

    当中dp[i]为i个人扔中的概率 dp[i] = C(n, i)*p^i*(1-p)^(n-i) 终于答案为w*k

    #include <cstdio>
    #include <cstring>
    using namespace std;
    double dp[20];
    double a[20], b[20];
    
    double cm(int n, int m)
    {
    	double ans = 1;
    	for(int i = 1; i <= m; i++)
    	{
    		ans *= (double)n--;
    		ans /= (double)i;
    	}
    	return ans;
    }
    int main()
    {
    	int T;
    	int cas = 1;
    	scanf("%d", &T);
    	while(T--)
    	{
    		int n, m, k;
    		double p;
    		scanf("%d %d %d %lf", &n, &m, &k, &p);
    		dp[0] = a[0] = b[0] = 1;
    		for(int i = 1; i <= n; i++)
    		{
    			a[i] = a[i-1]*p;
    			b[i] = b[i-1]*(1-p);
    		}
    		for(int i = 0; i <= n; i++)
    		{
    			dp[i] = cm(n, i)*a[i]*b[n-i];
    		}
    		double ans = 0;
    		for(int i = 1; i <= n; i++)
    			ans += dp[i]*(double)i;
    		ans *= (double)k;
    		printf("Case %d: %.10lf
    ", cas++, ans);
    	}
    	return 0;
    }



  • 相关阅读:
    Exp8-Web综合
    Exp7-网络欺诈防范
    Exp6-MSF应用基础
    加密API学习
    Exp5 信息搜集与漏洞扫描
    Exp4-恶意代码分析
    Exp3-免杀原理
    Exp2-后门原理与实践
    leetcode 22括号生成 暴力法
    413 等差数列划分
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6936303.html
Copyright © 2011-2022 走看看