题意:
题目链接:https://ac.nowcoder.com/acm/problem/14734
你在打比赛,这场比赛总共有12个题
对于第i个题,你的队伍有a[i]的几率解决她
如果解决不了她呢?
由于所有人讨论的都很大声
所以你有b[i]的概率从左边那个队那里听会这个题的做法
有c[i]的概率从右边那个队那里听会这个题的做法
请问最终你们队伍解出0-12题的概率分别是多少
输入描述:
第一行12个数表示a[1] -> a[12] 第二行12个数表示b[1] -> b[12] 第三行12个数表示c[1] -> c[12]
输出描述:
输出13行,第i行表示解出i-1题的概率 保留6位小数
题解:对于一道题其正确率为d[i]=1-(1-a[i])(1-b[i])(1-c[i]);(高中基本概率问题)
然后每一题均有两种状态:正确或错误。一共12道题,dfs暴力一下即可。
#include <bits/stdc++.h>
using namespace std;
double a[20],b[20],c[20],d[20];
double ans[20];
void dfs(int x,int num,double res){
//x:上一个题号 num:正确题数 res:概率
if(x>=12){
ans[num]+=res;
return;
}
dfs(x+1,num,res*(1-d[x+1])); //该题(x+1题)错误
dfs(x+1,num+1,res*d[x+1]); //该题(x+1题)正确
}
int main() {
int n=12;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++) d[i]=1-(1-a[i])*(1-b[i])*(1-c[i]);
dfs(0,0,1.0);
for(int i=0;i<=n;i++) printf("%.6f\n",ans[i]);
return 0;
}
京公网安备 11010502036488号