期望dp入门水平在线爆零)

  水博客使人愉悦(雾)


     以下题单来自https://www.cnblogs.com/Morning-Glory/p/11228082.html orzorzorz

    

SP1026 FAVDICE - Favorite Dice

一个n面的骰子,求期望掷几次能使得每一面都被掷到。

比较套路的题 

设现在掷到了i面,掷到新一面的概率(n-i)/n。

没有掷到新一面的概率i/n。

故式子为f[i]=i/nf[i]+(n-i)/nf[i+1]+1(要掷一次)

化简为f[i]=f[i+1]+n/(n-i)

 注意n==1的情况,1/0值在c++中的情况还不太清楚。

不如直接把f[0]设成1输出。

其实式子还是很容易推的,然而太久不推十分不熟练)

 1 #include<bits/stdc++.h>
 2 #define re register int
 3 #define db double
 4 #define maxn 1000+5
 5 using namespace std;
 6 db f[maxn];
 7 int t,n;
 8 int main()
 9 {
10     cin>>t;
11     while(t--)
12     {
13         cin>>n;
14         if(n==1) f[0]=1;
15         else{
16             f[n]=0;
17             for(re i=n-1;i>=0;i--)
18             f[i]=f[i+1]+(db)n/(db)(n-i);
19         }
20         printf("%.2lf",f[0]);
21             cout<<endl;
22     }
23     return 0;
24 }
View Code

猜你喜欢

转载自www.cnblogs.com/dgfudmg/p/11303456.html