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 }