济南手机网站建设专业定制,免费域名申请流程,wordpress 摄影博客,Wordpress怎么设置维护链接#xff1a; 文章目录题目描述题意题解#xff1a;代码时间限制#xff1a;C/C 1秒#xff0c;其他语言2秒
空间限制#xff1a;C/C 131072K#xff0c;其他语言262144K
64bit IO Format: %lld题目描述 你在打比赛#xff0c;这场比赛总共有12个题 对于第i个题…链接
文章目录题目描述题意题解代码时间限制C/C 1秒其他语言2秒
空间限制C/C 131072K其他语言262144K
64bit IO Format: %lld题目描述 你在打比赛这场比赛总共有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位小数 示例1 输入 复制
0.20 0.30 0.37 0.40 0.45 0.50 0.57 0.60 0.75 0.76 0.77 0.83
0.85 0.88 0.90 0.94 0.100 0.104 0.105 0.107 0.115 0.120 0.122 0.125
0.128 0.130 0.134 0.140 0.149 0.150 0.152 0.155 0.170 0.183 0.203 0.240输出 复制
0.000000
0.000000
0.000000
0.000011
0.000160
0.001508
0.009620
0.041938
0.124153
0.243773
0.301960
0.212453
0.064424题意
一开始看题目有点懵12个题咋输出十三个答案后来才反应过来第i行表示解出i-1题的概率意思是把做出0~12个题的概率依次输出我原以为是第4题的概率 样例中前三个都是0.000000并不是概率为0而是保留6位小数后面省略了
题解
求第i题做出的概率可以正着求也可以逆着逆着方便先求做不出的概率也就是q ( 1 -a [ i ] ) *( 1 -b [ i ] ) * ( 1- c [ i ] ) ,(第i题我不会左边也没听到右边也没听到做对的概率就是p 1 - q 然后求 第i行表示解出i-1题的概率典型的dp递推 dp[i][j]表示前i个问题咱做出j个题的概率 由第i-1个题地推过来第i个题有可能做对有可能做错加上对应的概率 dp[i][j]dp[i-1][j]第i题没对dp[i-1][j-1]第i题对了 确保都是对了j个题
初始化dp[0][0]1(你一个题都没做当然都错了所以错的概率是1)
代码
#includebits/stdc.h
#define forr(n) for(int i1;in;i)
using namespace std;
const int maxn15;
double a[maxn],b[maxn],c[maxn];
double dp[maxn][maxn];
double q[maxn],p[maxn];
int main(){forr(12) cina[i];forr(12) cinb[i];forr(12) cinc[i];dp[0][0]1;//初始化forr(12)q[i] (1-a[i])*(1-b[i])*(1-c[i]);//失败概率 forr(12)p[i]1-q[i];//成功概率 forr(12){dp[i][0]dp[i-1][0]*q[i];for(int j1;ji;j){dp[i][j]dp[i-1][j-1]*p[i]dp[i-1][j]*q[i];}}for(int i0;i12;i) printf(%.6f\n,dp[12][i]);return 0;
}/*0.20 0.30 0.37 0.40 0.45 0.50 0.57 0.60 0.75 0.76 0.77 0.83
0.85 0.88 0.90 0.94 0.100 0.104 0.105 0.107 0.115 0.120 0.122 0.125
0.128 0.130 0.134 0.140 0.149 0.150 0.152 0.155 0.170 0.183 0.203 0.240*/