func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1.01e9;   const double eps = 1e-9;   const int N = 22;   double RES = 0;   double rf, re, rs;   double df, de;   int cnt = 0;   int a[N];   int ac = 0;   int b[N];   int bc = 0;   int nf, ne, ns;   double e[N];   double FI[200];   double EN[200];   double FIRE(int p) {     double res = rf * 2;     for (int i = 0; (i) < (bc); ++i) res += FI[abs(b[i] - p)];     res *= df;     return res;   }   double ENERGY(int p) {     double res = re * 2;     for (int i = 0; (i) < (bc); ++i) res += EN[abs(b[i] - p)];     res *= de;     return res;   }   void solve() {     double val = 0;     for (int i = 0; (i) < (ac); ++i) {       double x = FIRE(a[i]);       double y = ENERGY(a[i]);       e[i] = x - y;       val += y;     }     sort(e, e + ac);     reverse(e, e + ac);     for (int i = 0; (i) < (nf); ++i) val += e[i];     RES = max(RES, val);   }   void go(int x, int y, int pos, int cnt1 = 0, int cnt2 = 0) {     if (x == 0 && y == 0) {       cnt++;       solve();       return;     }     if (x >= 1 && cnt1 < 2) {       a[ac++] = pos;       go(x - 1, y, pos + 1, cnt1 + 1, cnt2);       ac--;     }     if (x >= 2) {       a[ac++] = pos;       a[ac++] = pos;       go(x - 2, y, pos + 1, cnt1, cnt2);       ac--;       ac--;     }     if (y >= 1 && cnt2 < 1) {       b[bc++] = pos;       go(x, y - 1, pos + 1, cnt1, cnt2 + 1);       bc--;     }     if (y >= 2) {       b[bc++] = pos;       b[bc++] = pos;       go(x, y - 2, pos + 1, cnt1, cnt2);       bc--;       bc--;     }     if (x >= 1 && y >= 1) {       a[ac++] = pos;       b[bc++] = pos;       go(x - 1, y - 1, pos + 1, cnt1, cnt2);       ac--;       bc--;     }   }   int main() {     scanf( %d%d%d , &nf, &ne, &ns);     scanf( %lf%lf%lf , &rf, &re, &rs);     scanf( %lf%lf , &df, &de);     rf = sqrt(max(0., rf * rf - 1));     re = sqrt(max(0., re * re - 1));     rs = sqrt(max(0., rs * rs - 1));     for (int i = 0; i < 100; ++i) {       double l1 = -rf;       double r1 = rf;       double l2 = i - rs;       double r2 = i + rs;       FI[i] = max(0., min(r1, r2) - max(l1, l2));     }     for (int i = 0; i < 100; ++i) {       double l1 = -re;       double r1 = re;       double l2 = i - rs;       double r2 = i + rs;       EN[i] = max(0., min(r1, r2) - max(l1, l2));     }     go(nf + ne, ns, 0);     fprintf(stderr,  %d n , cnt), fflush(stderr);     printf( %.10f n , RES);     return 0;   }   