Codeforces Round #301 (Div. 2) D
概率dp,dp[i][j][k]的状态可以从dp[i+1][j][k],dp[i][j+1][k],dp[i][j][k+1]得到
double dp[110][110][110];
int main() {
int r,s,p;
scanf("%d%d%d",&r,&s,&p);
dp[r][s][p] = 1;
for(int i = r; i >= 0; i--) {
for(int j = s; j >= 0; j--) {
for(int k = p; k >= 0; k--) {
if(i == r && j == s && k == p);
else {
if((i+1)*k+(i+1)*j+j*k != 0) dp[i][j][k] += dp[i+1][j][k] *(i+1)*1.0*k/((i+1)*k+(i+1)*j+j*k);
if((j+1)*i+(j+1)*k+i*k != 0) dp[i][j][k] += dp[i][j+1][k] *(j+1)*1.0*i/((j+1)*i+(j+1)*k+i*k);
if((k+1)*i+(k+1)*j+i*j != 0) dp[i][j][k] += dp[i][j][k+1] *(k+1)*1.0*j/((k+1)*i+(k+1)*j+i*j);
}
}
}
}
double a = 0,b = 0,c = 0;
for(int i = 1; i <= r; i++)a+=dp[i][0][0];
for(int i = 1; i <= s; i++)b+=dp[0][i][0];
for(int i = 1; i <= p; i++)c+=dp[0][0][i];
printf("%.10lf %.10lf %.10lf\n",a,b,c);
return 0;
}