#include <bits/stdc++.h>
using namespace std;
long long pr[200004];
long double pr1[200004];
long double pr2[200004];
int a[200004];
int n, m;
int sz[200];
int ll[200];
int st[200004][52];
long double ans, f[200004][52];
int b[2000000];
struct line {
  long double k, b;
};
const long double eps = 1e-9;
long double per(line x1, line x2) { return (x2.b - x1.b) / (x1.k - x2.k); }
bool chck(line x1, line x2, line x3) {
  long double y1 = per(x1, x2);
  long double y2 = per(x1, x3);
  return (y2 - y1 <= 0);
}
long double genans(int l, int r, int k) {
  double ans = pr1[r] - pr1[l];
  ans -= pr[l] * (pr2[r] - pr2[l]);
  return ans + f[l][k];
}
line gline(int k, int i) {
  line ln;
  ln.k = -pr[i];
  ln.b = f[i][k] - pr1[i] + pr2[i] * pr[i];
  return ln;
}
void add(int k, int i) {
  sz[k]++;
  st[k][sz[k]] = i;
  while (sz[k] >= 3 &&
         chck(gline(k, st[k][sz[k] - 2]), gline(k, st[k][sz[k] - 1]),
              gline(k, st[k][sz[k]]))) {
    st[k][sz[k] - 1] = st[k][sz[k]];
    sz[k]--;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 1; i <= n; i++) pr[i] = pr[i - 1] + a[i];
  for (int i = 1; i <= n; i++) pr2[i] = pr2[i - 1] + 1.0 / a[i];
  for (int i = 1; i <= n; i++) pr1[i] = pr1[i - 1] + 1.0 * pr[i] / a[i];
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) {
      f[i][j] = 1e18;
      ll[j] = 1;
    }
  f[0][0] = 0;
  for (int j = 1; j <= m; j++) {
    for (int i = j; i <= n; i++) {
      add(j - 1, i - 1);
      if (i == 1 && j == 1) break;
    }
    for (int i = j; i <= n; i++) {
      while (ll[j] < sz[j - 1] && genans(st[j - 1][ll[j]], i, j - 1) >=
                                      genans(st[j - 1][ll[j] + 1], i, j - 1))
        ll[j]++;
      f[i][j] = genans(st[j - 1][ll[j]], i, j - 1);
    }
  }
  cout.precision(10);
  cout << fixed << f[n][m] << "\n";
  return 0;
}
