-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path540D.cpp
More file actions
39 lines (36 loc) · 995 Bytes
/
Copy path540D.cpp
File metadata and controls
39 lines (36 loc) · 995 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<bits/stdc++.h>
using namespace std;
int r, m, k;
double f[109][109][109];
double dp(int a, int b, int c){
if(f[a][b][c] != 0) return f[a][b][c];
if(a > r || b > m || c > k) return 0;
if(a == r && b == m && c == k) return 1;
double v = 0;
if(b != 0 || c != 0){
double fz = (a + 1) * c * 1.0;
double fm = (a + 1) * b + (a + 1) * c + b * c * 1.0;
v += dp(a + 1, b, c) * (fz / fm);
}
if(a != 0 || c != 0){
double fz = (b + 1) * a * 1.0;
double fm = (b + 1) * a + a * c + (b + 1) * c * 1.0;
v += dp(a, b + 1, c) * (fz / fm);
}
if(b != 0 || a != 0){
double fz = (c + 1) * b * 1.0;
double fm = a * b + a * (c + 1) + b * (c + 1) * 1.0;
v += dp(a, b, c + 1) * (fz / fm);
}
f[a][b][c] = v;
return v;
}
int main(){
scanf("%d%d%d", &r, &m, &k);
double a, b, c;
for(int i = r; i > 0; i--) a += dp(i, 0, 0);
for(int i = m; i > 0; i--) b += dp(0, i, 0);
for(int i = k; i > 0; i--) c += dp(0, 0, i);
printf("%.12lf %.12lf %.12f ", a, b, c);
return 0;
}