#include <bits/stdc++.h>
using namespace std;
int n, m, cur1, cur2, old1, old2;
long double a[200100], pre[200100], sum[200100], inv[200100];
long double E[200100][55];
auto alpha = [](int j) { return -sum[j]; };
auto beta = [](int j, int k) { return E[j][k] - pre[j] + sum[j] * inv[j]; };
class Line {
 public:
  long double A, B;
  Line(long double _A = 0, long double _B = 0) : A(_A), B(_B) {}
  friend bool concave(Line a, Line b, Line c) {
    return -(a.B - b.B) * (a.A - c.A) < -(a.B - c.B) * (a.A - b.A);
  }
  friend bool precede(long double x, Line a, Line b) {
    return x * (a.A - b.A) >= -(a.B - b.B);
  }
};
Line cur[200100], old[200100];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
  }
  for (int i = 1; i <= n; ++i) {
    inv[i] = inv[i - 1] + 1 / a[i];
    sum[i] = sum[i - 1] + a[i];
    pre[i] = pre[i - 1] + sum[i] / a[i];
  }
  old1 = 1, old2 = 0;
  for (int i = 1; i <= n; ++i) {
    E[i][1] = pre[i];
    Line line(alpha(i), sum[i] * inv[i]);
    while (old1 < old2 && concave(old[old2 - 1], old[old2], line) == false)
      --old2;
    old[++old2] = line;
  }
  for (int k = 2; k <= m; ++k) {
    cur1 = 1, cur2 = 0;
    for (int i = k; i <= n; ++i) {
      while (old1 < old2 && precede(inv[i], old[old1], old[old1 + 1]) == true) {
        ++old1;
      }
      E[i][k] = old[old1].B + old[old1].A * inv[i] + pre[i];
      Line line(alpha(i), beta(i, k));
      while (cur1 < cur2 && concave(cur[cur2 - 1], cur[cur2], line) == false)
        --cur2;
      cur[++cur2] = line;
    }
    old1 = cur1, old2 = cur2;
    for (int i = old1; i <= old2; ++i) {
      old[i] = cur[i];
    }
  }
  cout << setprecision(9) << fixed << E[n][m] << "\n";
  return 0;
}
