HDU dice DP求期望 推公式

2022-04-28 19:48:11 字數 1169 閱讀 4937

題意:

乙個m邊形的骰子,求連續投出n個相同的面,和m個兩兩不同的面的期望次數。

solution:

令\(f_i\)表示已經連續投出i個相同的面,到連續投出n個還需要的期望次數.

令\(g_i\)類似的表示第二種問題的期望次數。

對於\(f_i\) ,有兩種情況:

① 投出了和前i個相同的面,轉移到了\(f_\) ,那麼\(f_i+=(f_+1)*\frac\)

② 投出了乙個不同的面,轉移到了\(f_1\),那麼\(f_i+=(f_1+1)*\frac\)

綜上,\(f_i=(f_+1)*\frac+(f_1+1)*\frac=f_*\frac+f_1*\frac+1\)

同理的話有:\(m*f_=m+(m-1)*f_1+f_\)

兩式相減得到:\(m*(f_-f_i)=f_-f_\)

可以發現,這成乙個等比數列:

\[f_0-f_1=1\\

f_1-f_2=m\\

…\\f_-f_n=m^

\]運用等比數列求和公式可得:\(ans=\frac)}+1\) 。

對於\(g_i\):

① 投出了和前i個都不同的面,轉移到了\(g_\) ,那麼\(g_i+=(g_+1)*\frac\)

② 投出了以前出現過的面,那麼可能轉移到了\(g_1,g_2,…g_i\),那麼\(g_i+=\sum_}\)

綜上,\(g_i=(g_+1)*\frac+\sum_}=g_*\frac+\frac*\sum_+1\)

同上面\(f_i\)類似的處理之後,可以同樣的得到\(g_i-g_=\frac*(g_-g_)\),直接遞推一下即可。

code:

#include#include#include#include#include#define rg register

#define il inline

#define ll long long

#define db double

using namespace std;

const int n=1e6+1;

int n,m;

db ans,s[n];

il int qpow(int x,int p)

int main()

} }return 0;

}

ACdream1139 Sum 推公式 逆元求解

題意 給定乙個由0 9組成的矩陣,我們求行相鄰的組成的數與列相鄰的組成的數的和。eg 第一行組成的數有 1,2,3,12,23,123 第一列組成的數有 1,4,7,12,47,147.暴力列舉所有的數肯定是不可取的,我們試著總結。我們發現a x y 在行裡出現的數對以後和的貢獻為 x a x y ...

(概率DP)正向推概率,反向推期望

這個思想真是太經典了!為什麼要正向推概率,反向推期望呢?事件a在另外乙個事件b已經發生條件下的發生概率。條件概率表示為p a b 讀作 在b條件下a的概率 然後,我們再看看什麼是貝葉斯公式。算了,我就不扯了,自己點進去看吧。現在,正文來了。拿飛行棋來說,可以先看看hdu 4405 aeroplane...

字尾和 推公式

題意 n個數,分為k組,每組的數字的下標是連續的,則分組的代價為 組號 數字 例如3個數1,2,3,分為2組,這麼分組的代價為1 1 1 2 2 3。n,k 3e5。題解 1.假設pi是第i組的第1個數字的下標,sum i 是第i個數到第n個數求和。那麼分組的代價為1 sum p1 sum p2 2...