func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Problem {     long long as, at, bs, bt;     double pr;   } a[2000];   const long long P = (long long)1e6;   int n, m;   long long fail[1001];   long long f[1001][1600];   double g[1001][1600];   bool cmp(Problem u, Problem v) {     return u.bt * u.pr * (1 - v.pr) < v.bt * v.pr * (1 - u.pr);   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; i++)       scanf( %I64d%I64d%I64d%I64d%lf , &a[i].as, &a[i].bs, &a[i].at, &a[i].bt,             &a[i].pr);     sort(a + 1, a + n + 1, cmp);     for (int i = 1; i <= n; i++) fail[i] = (long long)(a[i].pr * P + 0.5);     for (int i = 0; i <= n; i++)       for (int j = 0; j <= m; j++) f[i][j] = -1;     f[0][0] = 0;     for (int i = 0; i < n; i++)       for (int j = 0; j <= m; j++)         if (f[i][j] != -1) {           int t = i + 1;           if (f[i + 1][j] < f[i][j] ||               (f[i + 1][j] == f[i][j] && g[i + 1][j] > g[i][j])) {             f[i + 1][j] = f[i][j];             g[i + 1][j] = g[i][j];           }           if (j + a[t].at <= m) {             long long t1 = f[i][j] + a[t].as * P;             double p1 = g[i][j] + a[t].at;             int j1 = j + a[t].at;             if (f[i + 1][j1] < t1 || (f[i + 1][j1] == t1 && g[i + 1][j1] > p1)) {               f[i + 1][j1] = t1;               g[i + 1][j1] = p1;             }           }           if (j + a[t].at + a[t].bt <= m) {             long long t1 = f[i][j] + a[t].as * P + a[t].bs * (P - fail[t]);             double p1 =                 g[i][j] * a[t].pr + a[t].at + (j + a[t].bt) * (1 - a[t].pr);             int j1 = j + a[t].at + a[t].bt;             if (f[i + 1][j1] < t1 || (f[i + 1][j1] == t1 && g[i + 1][j1] > p1)) {               f[i + 1][j1] = t1;               g[i + 1][j1] = p1;             }           }         }     long long ans1 = -1;     double ans2 = 0;     for (int i = 0; i <= m; i++)       if (ans1 < f[n][i] || (ans1 == f[n][i] && g[n][i] < ans2))         ans1 = f[n][i], ans2 = g[n][i];     printf( %.9lf %.9lf n , (double)ans1 / (double)P, ans2);     return 0;   }   