Advertisement
Malinovsky239

C

Jan 13th, 2012
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. #define N 1005
  5. #define M 105
  6. #define eps (1e-5)
  7.  
  8. using namespace std;
  9.  
  10. int a[N], n, from[N][M];
  11. double dp[N][M];
  12.  
  13. void ans(int pos, int pos2) {
  14.     if (pos)
  15.         ans(pos - 1, from[pos][pos2]);
  16.     cout << pos2 << " ";
  17. }
  18.  
  19. int main() {
  20.     cin >> n;
  21.     for (int i = 0; i < n; i++)
  22.         cin >> a[i];
  23.  
  24.     for (int i = 1; i < n; i++)
  25.         for (int j = 1; j <= a[i - 1]; j++)
  26.             for (int k = 1; k <= a[i]; k++) {
  27.                 if (dp[i][k] + eps < dp[i - 1][j] + double(k) / j) {
  28.                     dp[i][k] = dp[i - 1][j] + double(k) / j;
  29.                     from[i][k] = j;
  30.                 }
  31.             }
  32.  
  33.     double res = 0;
  34.     int pos;
  35.     for (int i = 1; i <= a[n - 1]; i++)
  36.         if (dp[n - 1][i] > res + eps) {
  37.             res = dp[n - 1][i];
  38.             pos = i;
  39.         }
  40.  
  41.     cout.precision(3);
  42.     cout << fixed << res << endl;
  43.     ans(n - 1, pos);
  44.  
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement