洛谷 p4550 收集郵票
演算法標籤:動態規劃(dp)
、期望dp
有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1/n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k張郵票需要支付k元錢。
現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期望。
一行,乙個數字n
n<=10000
要付出多少錢.
保留二位小數
輸入 #1
3
輸出 #1
21.25
期望dp
按照題目的描述,我們可以設乙個\(f\)和乙個\(g\)
\(f[i]\)表示買到第\(i\)張郵票還需要購買的期望次數
\(g[i]\)表示買到第\(i\)張郵票還需要期望花費的錢數。
講到這裡大概就可以發現,這道題需要逆推。
對於乙個\(f[i]\),我們也可以有以下的幾種方案:
會買到重複郵票的概率為\(\frac\),所以這項貢獻:\(f[i] \times \frac\)
會買到不同郵票的概率為\(\frac\),所以這項貢獻:\(f[i+1] \times \frac\)
買當前郵票,貢獻為:\(1\)。
所以對於乙個\(f[i]\),我們可以得出:\(f[i]=f[i] \times \frac + f[i+1] \times \frac+1\)。
化簡得出:\(f[i] = f[i + 1] + \frac \dots \ ①\)
那麼對於\(g[i]\),推導的方式大致與\(f[i]\)類似:
\(g[i] = (f[i]+g[i]+1) \times \frac+(f[i+1]+g[i+1]+1)\times\frac\)
化簡得出:\(g[i]=\frac\times f[i]+f[i+1]+g[i+1]+\frac \dots \ ②\)
至此,兩個必要的遞推式都推導完畢,接下來就是注意好double的處理,輸入和輸出,計算等等即可。
#include using namespace std;
const int n = 10010;
int n;
double f[n], g[n];
double _div(int a, int b)
int main()
printf("%.2lf", g[0]);
}
洛谷4550 收集郵票(期望DP)
為啥這道題都是道許可權題。雖然 很短,但是要想清楚還是很難。令f i 表示當前已經擁有了i種郵票,要擁有n種郵票的期望操作次數。取到已得到的郵票概率為i n frac ni 取到新的郵票的概率為n i n frac nn i 所以可以得到遞推式f i f i times in frac ni f i...
期望 概率論 收集郵票(洛谷P4550)
有n 種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡 凡那裡購買,每次只能買一張,並且買到的郵票究竟是n 種郵票中的哪一種是 等概率的,概率均為1 n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k 張 郵票需要支付k 元錢。現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類 的郵票需要...
洛谷 P4538 收集郵票
有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1 n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k張郵票需要支付k元錢。現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期...