題解 概率 DP

2022-03-06 13:16:04 字數 1112 閱讀 3297

這是第一道自己做出來的概率\(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\)時刻電梯裡有\(j\)個人的概率。同樣很輕鬆的得到轉移方程:\(f[i][j]=f[i - 1][j]*(1-p)+f[i -1][j-1]*p\),不過要注意的是如果已經有\(n\)個人了的話,就不能再用之前的轉移方程了。因為如果上乙個時刻電梯已經有\(n\)個人的話現在一定還是\(n\)個人,不用乘概率。也就是說\(f[i][n] = f[i-1][n]+f[i-1][n-1]*p\)。如果一開始電梯上還沒有人,那麼從\(f[i-1][j-1]\)轉移過來是不合法的,因為不存在\(-1\)個人。

這兩種做法唯一的區別就是轉移方程中對於電梯進來人這個狀態的描述,如果是算期望我們知道期望等於權值乘以概率,所以如果電梯進來人的話要表示成\((f[i-1][j-1]+1)*p\),而如果是設概率的話則不用考慮人數(權值)的變化。當然兩個的答案統計方法也不一樣。如果是期望的話直接輸出就好了。如果是概率的話依然考慮期望的定義,需要列舉最終的時刻電梯內不同人數的概率,答案就是\(\sum_^nf[t][i]*i\)

#include using namespace std;

double f[2010][2010];

int main()

}printf("%.7lf",f[n][t]);

return 0;

}

#include using namespace std;

double f[2010][2010];

int main()

}double ans = 0.0;

for(int i = 0;i <= n;i++)ans += f[t][i] * i;//有概率推算期望

printf("%.7lf",ans);

return 0;

}

保送 題解 概率DP

題目背景 czk赫赫有名,為什麼呢?因為他參加了超多競賽,所以認識了無數oier。而無數oier也都認識他,為什麼呢?因為czk實在是太牛了 所以我們經常可以聽到oier之間的典型談話 小a 你知道czk嗎?小b 當然認識啦,就是那個ak了xx競賽的dadiao啊 小a 不止,他還ak了xx競賽,x...

概率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 ...