uva10648 概率dp

https://vjudge.net/problem/UVA-10648

  将n个不同小球放入m个不同盒子,放入每个盒子的概率相同,问放完之后仍有空盒子的概率;

  还是太傻- -,可以倒着计算出放完之后没有空盒子的概率,在让1减去就是答案,这样好写一点。

  f[i][j]表示i个球放入m盒子无空盒子的概率,则 f[i][j]=f[i-1][j-1]*((M-j+1)/M)+f[i-1][j]*(j/M);

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 #define qz q.size()
 5 double f[105][105];
 6 int main()
 7 {
 8     int N,M,i,j,k=0;
 9     while(cin>>N&&N!=-1){
10             cin>>M;
11     memset(f,0,sizeof(f));
12     f[0][0]=1;
13     for(i=1;i<=N;++i)
14     {
15         for(j=1;j<=M;++j)
16         {
17             f[i][j]=f[i-1][j-1]*(1.0*(M-j+1)/M)+f[i-1][j]*(1.0*j/M);
18         }
19     }
20     printf("Case %d: %.7f\n",++k,1-f[N][M]);
21     }
22     return 0;
23 }

 

posted @ 2017-09-05 18:01  *zzq  阅读(116)  评论(0编辑  收藏  举报