牛客网【每日一题】5月19日题目精讲 比赛
鏈接:
文章目錄
- 題目描述
- 題意
- 題解:
- 代碼
題目描述
你在打比賽,這場比賽總共有12個題
對于第i個題,你的隊伍有a[i]的幾率解決她
如果解決不了她呢?
由于所有人討論的都很大聲
所以你有b[i]的概率從左邊那個隊那里聽會這個題的做法
有c[i]的概率從右邊那個隊那里聽會這個題的做法
請問最終你們隊伍解出0-12題的概率分別是多少
輸入描述:
第一行12個數(shù)表示a[1] -> a[12] 第二行12個數(shù)表示b[1] -> b[12] 第三行12個數(shù)表示c[1] -> c[12]
輸出描述:
輸出13行,第i行表示解出i-1題的概率
保留6位小數(shù)
示例1
輸入
復制
輸出
復制
題意
一開始看題目有點懵,12個題咋輸出十三個答案,后來才反應過來,第i行表示解出i-1題的概率,意思是把做出0~12個題的概率依次輸出,我原以為是第4題的概率
樣例中前三個都是0.000000,并不是概率為0,而是保留6位小數(shù),后面省略了
題解:
求第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)
代碼
#include<bits/stdc++.h> #define forr(n) for(int i=1;i<=n;i++) using namespace std; const int maxn=15; double a[maxn],b[maxn],c[maxn]; double dp[maxn][maxn]; double q[maxn],p[maxn]; int main(){forr(12) cin>>a[i];forr(12) cin>>b[i];forr(12) cin>>c[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 j=1;j<=i;j++){dp[i][j]=dp[i-1][j-1]*p[i]+dp[i-1][j]*q[i];}}for(int i=0;i<=12;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*/總結
以上是生活随笔為你收集整理的牛客网【每日一题】5月19日题目精讲 比赛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dreamweaver怎么返回顶部(dr
- 下一篇: 520 钻石争霸赛 题解