#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:134217728")
using namespace std;
int n, k;
int t[200000];
double dp[51][200001];
double p[200001];
double s[200001];
double w[200001];
struct ray {
  double x, y;
  double a, b;
  ray() {}
  ray(double x, double y, double a, double b) : x(x), y(y), a(a), b(b) {}
};
ray st[200001];
int sz;
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; ++i) scanf("%d", &t[i]);
  for (int i = 0; i < n; ++i) {
    s[i + 1] = s[i] + t[i];
    p[i + 1] = p[i] + 1.0 / t[i];
    w[i + 1] = w[i] + s[i + 1] / (0.0 + t[i]);
  }
  for (int i = 0; i <= n; ++i) dp[1][i] = w[i];
  for (int i = 2; i <= k; ++i) {
    sz = 0;
    int pos = 0;
    for (int j = 1; j <= n; ++j) {
      double a = -s[j - 1];
      double b = dp[i - 1][j - 1] + s[j - 1] * p[j - 1] - w[j - 1];
      while (sz > 0 && a * st[sz - 1].x + b < st[sz - 1].y) sz--;
      if (sz == 0)
        st[sz++] = ray(0, b, a, b);
      else {
        double x = (st[sz - 1].b - b) / (a - st[sz - 1].a);
        st[sz++] = ray(x, a * x + b, a, b);
      }
      pos = min(pos, sz - 1);
      if (st[pos].x > p[j]) pos--;
      while (pos < sz - 1 && st[pos + 1].x + 1e-9 <= p[j]) pos++;
      dp[i][j] = st[pos].a * p[j] + st[pos].b + w[j];
    }
  }
  printf("%.10lf\n", dp[k][n]);
  return 0;
}
