Uva-10648-Chocolate Box

来源:互联网 发布:女生宿舍关系 知乎 编辑:程序博客网 时间:2024/05/23 01:25

这个题大意是说给你n个巧克力,要放到m个盒子里去,然后要求求出最后有一个或多个盒子为空的概率

不难推出动态转移方程式

dp[i][j]=dp[i-1][j]*j/m+dp[i-1][j-1]*(m-j+1)/m;

dp[i][j]表示前i个巧克力装到j个盒子的概率

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=101;int n,m;double dp[maxn][maxn];int main(){    int cas=1;    while(scanf("%d",&n)&&(n!=-1))    {scanf("%d",&m);memset(dp,0,sizeof(dp));dp[1][1]=1;for(int i=2;i<=n;i++)    for(int j=1;j<=m;j++)dp[i][j]=dp[i-1][j]*(j*1.0/m)+dp[i-1][j-1]*((m-j+1)*1.0/m);double ans=0;for(int i=1;i<m;i++)    ans+=dp[n][i];printf("Case %d: %.7f\n",cas++,ans);    }    return 0;}


原创粉丝点击