#include <bits/stdc++.h>
using namespace std;
const long long maxn = 200005, maxm = 55;
long long i, j, k, m, n, l, r;
long long a[maxn], suma[maxn], q[maxn];
double b[maxn], c[maxn], sumb[maxn], sumc[maxn], f[maxm][maxn];
inline long long x(long long p) { return suma[p]; }
inline double y(long long p, long long c) {
  return f[c - 1][p] + 1.0 * suma[p] * sumb[p] - sumc[p];
}
inline double slope(long long a, long long b, long long c) {
  if (x(a) == x(b))
    return y(a, c) > y(b, c) ? 10000000000000000 : -10000000000000000;
  return 1.0 * (y(a, c) - y(b, c)) / (x(a) - x(b));
}
signed main() {
  scanf("%lld%lld", &n, &m);
  for (i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    suma[i] = suma[i - 1] + a[i];
    b[i] = 1.0 / a[i], sumb[i] = sumb[i - 1] + b[i];
    c[i] = 1.0 * suma[i] / a[i], sumc[i] = sumc[i - 1] + c[i];
  }
  for (i = 1; i <= n; i++) f[0][i] = 10000000000000000;
  for (i = 1; i <= m; i++) {
    l = 1, r = 0;
    q[++r] = 0;
    for (j = 1; j <= n; j++) {
      while (l < r && slope(q[l + 1], q[l], i) <= sumb[j]) l++;
      f[i][j] = f[i - 1][q[l]] + sumc[j] - sumc[q[l]] -
                suma[q[l]] * (sumb[j] - sumb[q[l]]);
      while (l < r && slope(j, q[r - 1], i) <= slope(q[r], q[r - 1], i)) r--;
      q[++r] = j;
    }
  }
  printf("%.10lf\n", f[m][n]);
  return 0;
}
