題目背景:
czk赫赫有名,為什麼呢?因為他參加了超多競賽,所以認識了無數oier。而無數oier也都認識他,為什麼呢?因為czk實在是太牛了~ 所以我們經常可以聽到oier之間的典型談話: 小a:你知道czk嗎? 小b:當然認識啦,就是那個ak了xx競賽的dadiao啊~ 小a:不止,他還ak了xx競賽,xx競賽,xx競賽…… 那麼,czk同學到底巨到什麼地步呢? 世界上總共有n門競賽,czk同學參加了全部,並且都拿到了保送!!並且還會經常性地虐全場。(其實czk虐場地概率高達200%,但是為了題目需要,只能把czk dadiao寫菜10inf倍)
題目描述:
現在有n場競賽,czk對於不同競賽有不同的概率虐場。現在czk想知道,他有多少的概率至少虐m次場。
輸入格式:
第一行兩個用空格隔開的正整數n,m 下面n行,每行乙個0~1的實數,第i+1行的實數表示第i個競賽虐場的概率。
輸出格式:
一行乙個實數,表示至少虐m次場的概率。實數保留六位小數。
輸入樣例1:
2 11
1輸出樣例1:
1.000000
輸入樣例2:
3 10.046921
0.959868
0.008229
輸出樣例2:
0.962066
說明:
對於100%的資料,滿足1≤m≤n≤20
知識點:概率dp
講解:
對於這一題首先要知道一些概率的計算公式:
乘法定則:我們定義三個事件發生的概率為a,b,c,如果a和b同時發生才出現c,那麼出現c的概率為a*b
加法定則: 如果a和b任意滿足乙個都會出現c,那麼出現c的概率為a+b
知道了這兩個公式之後我們再看一下這題,題目要求至少虐m場的概率,換句話說就是虐m場及以上的概率和,這個也就是加法定則,因為只要是m及以上都可以得到至少虐m場,符合加法定則,所以我們發現如果要計算虐i場的概率的話,要知道兩個條件,乙個是總共有幾場,另乙個是虐i場,所以我們可以定義出狀態dp[i][j]表示總共i場虐j場,對於狀態轉移方程,我們假設第i場czk不打算虐場,那麼dp[i][j]=dp[i-1][j]*(1-a[i]) 其中a[i]表示第i場czk虐場的概率,而(1-a[i])表示第i場czk不虐場的概率,對於第i場czk虐場的話,dp[i][j]=dp[i-1][j-1]a[i],因為上面的兩種情況滿足加法定則,所以我們可以這麼寫,dp[i][j]=dp[i-1][j](1-a[i])+dp[i-1][j-1]a[i],這樣狀態轉移方程就出來了,還有乙個要注意,就是我們在dp時當j==0的話只能dp[i-1][j](1-a[i]),如果不特盤會陣列越界。
上**:
#include
#include
using
namespace std;
double a[40]
,dp[40]
[40];
intmain()
題解 概率 DP
這是第一道自己做出來的概率 dp 題 這個題其實有兩種做法。設 f i j 表示當前考慮第 i 個人,在 j 時刻電梯裡的期望人數,那麼很容易得到轉移方程 要麼是進來乙個人,要麼是沒進來人,所以 f i j f i 1 j 1 1 p f i j 1 1 p 設 f i j 表示 i 時刻電梯裡有 ...
概率DP初步
題目簡述 乙個r行c列的格仔,起始點在 1,1 終點在 r,c 每一步可能的走法有 不動 向右走 向下走,每走一步花費兩點魔法值,現給出在每一點三種走法的概率,求走完迷宮時所花魔法值的期望。分析 運用dp演算法的話,首先需要確定乙個合適狀態來描述子問題的情況,很明顯本題的狀態可以定義為dp i j ...
概率dp入門
概率dp主要用於求解期望 概率等題目。轉移方程有時候比較靈活。一般求概率是正推,求期望是逆推。通過題目可以體會到這點。poj2096 collecting bugs include include include include include typedef long long ll using ...