#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch - '0' < 0 || ch - '0' > 9) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch - '0' >= 0 && ch - '0' <= 9) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, K;
int t[200010];
double sum[200010], A[200010], B[200010];
struct P {
  double x, y;
  P(const double &x0 = 0, const double &y0 = 0) : x(x0), y(y0) {}
} s[200010];
int top, id[200010];
double f[200010][55];
double slope(P a, P b) { return (a.y - b.y) / (a.x - b.x); }
int main() {
  n = read();
  K = read();
  for (int i = 1; i <= n; i++) t[i] = read();
  for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + (double)t[i];
  for (int i = 1; i <= n; i++) A[i] = A[i - 1] + (double)sum[i] / (double)t[i];
  for (int i = 1; i <= n; i++) B[i] = B[i - 1] + 1.0 / (double)t[i];
  for (int i = 1; i <= n; i++) f[i][1] = A[i];
  for (int j = 2; j <= K; j++) {
    int l = 1, r = 0;
    s[++r] = P(0, 0);
    id[1] = 0;
    for (int i = 1; i <= n; i++) {
      while (l < r && slope(s[l], s[l + 1]) < B[i]) l++;
      int k = id[l];
      f[i][j] = f[k][j - 1] + A[i] - A[k] - sum[k] * (B[i] - B[k]);
      P tmp = P(sum[i], sum[i] * B[i] + f[i][j - 1] - A[i]);
      while (l < r && slope(tmp, s[r - 1]) < slope(s[r - 1], s[r])) r--;
      s[++r] = tmp;
      id[r] = i;
    }
  }
  printf("%.10lf\n", f[n][K]);
  return 0;
}
