应该是简单概率dp,由于写得少显得十分蠢萌
求期望逆推,求概率正推,大概是这么个意思,贴一发留恋
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define db double const int maxn=108; db dp[maxn][maxn][maxn]; int main() { int i,j,n,m,k,p; while(scanf("%d%d%d",&n,&m,&k)==3) { memset(dp,0,sizeof(dp)); dp[n][m][k]=1.0; for(i=n;i>=1;i--) for(j=m;j>=1;j--) for(p=k;p>=1;p--) { db shit=i*j+j*p+i*p; dp[i-1][j][p]+=dp[i][j][p]*(i*p*1.0/shit); dp[i][j-1][p]+=dp[i][j][p]*(i*j*1.0/shit); dp[i][j][p-1]+=dp[i][j][p]*(j*p*1.0/shit); } db x,y,z; x=y=z=0.0; for(i=1;i<=100;i++) for(j=0;j<=100;j++) { x+=dp[i][j][0]; y+=dp[0][i][j]; z+=dp[j][0][i]; } printf("%.10f %.10f %.10f ",x,y,z); } return 0; }