日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P4550-收集邮票【期望dp】

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4550-收集邮票【期望dp】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前題

ZYCdalaoZYCdalaoZYCdalao讓我推這題,然后我只推出了fff的推導(dǎo),我還是太菜了QVQQVQQVQ


正題

題目鏈接:https://www.luogu.org/problemnew/show/P4550


題目大意

nnn種,每次隨機(jī)買一個(gè)郵票(每種的概率均等),然后第kkk種要kkk元,求收集完所有郵票需要的期望錢數(shù)。


解題思路

首先設(shè)gig_igi?表示購買iii個(gè)郵票,買完剩下的郵票需要的期望錢數(shù),我們發(fā)現(xiàn)因?yàn)橛?span id="ozvdkddzhkzd" class="katex--inline">kkk,我們很難計(jì)算答案,但我們可以將費(fèi)用推后計(jì)算。先設(shè)fif_ifi?表示拿到了iii個(gè),要取完剩下的郵票需要購買的期望次數(shù)(倒推),那么有n?in\frac{n-i}{n}nn?i?的概率買到正確的郵票,有in\frac{i}{n}ni?的概率買到之前買過的郵票
fi=n?in?fi+1+in?fi+1f_i=\frac{n-i}{n}*f_{i+1}+\frac{i}{n}*f_i+1fi?=nn?i??fi+1?+ni??fi?+1
fi=n?in?fi+1+in?fi+1f_i=\frac{n-i}{n}*f_{i+1}+\frac{i}{n}*f_i+1fi?=nn?i??fi+1?+ni??fi?+1
n?in?fi=n?in?fi+1\frac{n-i}{n}*f_i=\frac{n-i}{n}*f_i+1nn?i??fi?=nn?i??fi?+1
fi=fi+1+nn?if_i=f_{i+1}+\frac{n}{n-i}fi?=fi+1?+n?in?

然后我們考慮如何推導(dǎo)gig_igi?,我們每次有in\frac{i}{n}ni?的概率買到已經(jīng)有了的,有n?in\frac{n-i}{n}nn?i?的概率買到?jīng)]有的,因?yàn)橘M(fèi)用推后計(jì)算,所以每次后面取到的費(fèi)用都會(huì)+1+1+1,所以現(xiàn)在的費(fèi)用就是之前的購買次數(shù)加上原來的費(fèi)用fi+1f_{i}+1fi?+1,那么加上前面的購買費(fèi)用就是gi+fi+1g_i+f_i+1gi?+fi?+1

那么推導(dǎo)
gi=in(gi+fi)+n?in(gi+1+fi+1)+1g_i=\frac{i}{n}(g_i+f_i)+\frac{n-i}{n}(g_{i+1}+f_{i+1})+1gi?=ni?(gi?+fi?)+nn?i?(gi+1?+fi+1?)+1
gi=in?gi+in?fi+n?in(gi+1+fi+1)+1g_i=\frac{i}{n}*g_i+\frac{i}{n}*f_i+\frac{n-i}{n}(g_{i+1}+f_{i+1})+1gi?=ni??gi?+ni??fi?+nn?i?(gi+1?+fi+1?)+1
n?ingi=in?fi+n?in(gi+1+fi+1)\frac{n-i}{n}g_i=\frac{i}{n}*f_i+\frac{n-i}{n}(g_{i+1}+f_{i+1})nn?i?gi?=ni??fi?+nn?i?(gi+1?+fi+1?)
gi=in?i?fi+gi+1+fi+1+1g_i=\frac{i}{n-i}*f_i+g_{i+1}+f_{i+1}+1gi?=n?ii??fi?+gi+1?+fi+1?+1

overoverover


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=11000; double n; double f[N],g[N]; int main() {scanf("%lf",&n);for(int i=n-1;i>=0;i--){f[i]=f[i+1]+(double)n/(n-i);g[i]=(double)(f[i]+1)*i/(n-i)+g[i+1]+f[i+1]+1;}printf("%.2lf",g[0]); }

總結(jié)

以上是生活随笔為你收集整理的P4550-收集邮票【期望dp】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。