本文主要是介绍UVA11181条件概率 Probability|Given,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
条件概率 Probability|Given - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
样例解释:
需要学习条件概率和贝叶斯定理
//1 2 - 0.1*0.2*(1-0.3) == 0.014
//1 - 3 0.1*0.8*0.3 == 0.024
//- 2 3 0.9*0.2*0.3 == 0.054
// 0.092//(0.014+0.024)/0.092 == 0.413043
包含1的概率 除以 所有情况的概率之和 就是1买到东西的概率
(所有情况是这里r==2时的所有情况)
接下来可以欣赏洛谷题解了。
代码:
我用的状态压缩(即二进制表示)来做的。
暴力r符合的情况做统计,就是根据上面贝叶斯公式来计算。
double arr[25] = { 0 };
double dp[25][1ll << 20];
signed main()
{//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;//for (int i = 1; i <= t; i++)//{// solve(i);//}int n, r;int round = 1;while (1){cin >> n >> r;if (n == 0 && r == 0)break;for (int i = 0; i < n; i++){cin >> arr[i];}double asum = 0;double sum[22] = { 0 };for (int i = 0; i < (1ll<<20); i++){//如果是r个int cnt = 0;for (int j = 0; j < n; j++){if ((i >> j & 1) == 1)cnt++;}if (cnt != r)continue;double tmp = 1;for (int j = 0; j < n; j++){if ((i >> j & 1) == 1)tmp *= arr[j];elsetmp *= (1 - arr[j]);}for (int j = 0; j < n; j++){if ((i >> j & 1) == 1){sum[j] += tmp;}}asum += tmp;}cout << "Case "<< round++ << ":" << endl;for (int i = 0; i < n; i++){printf("%.6lf\n", sum[i] / asum);}}return 0;
}
这篇关于UVA11181条件概率 Probability|Given的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!