#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:66777216")
using namespace std;
const int N = 200000 + 5;
const long double ep = 1e-10;
int n;
int a[N];
long long su[N];
long double A[N];
long double B[N];
const int K = 53;
long double dp[K][N];
const long long INF = (long long)N * N;
int top = 0;
long double k[N];
long double b[N];
long double x[N];
void update(int u, int j) {
  long double k1 = B[j];
  long double b1 = dp[u - 1][j + 1] + A[j];
  while (top && b[top] - (long double)x[top] * k[top] >
                    b1 - (long double)x[top] * k1 - ep)
    --top;
  if (!top) {
    ++top;
    x[top] = (long double)INF;
    k[top] = k1;
    b[top] = b1;
    return;
  }
  if (b[top] - b1 < ep) return;
  long double y = (long double)(b[top] - b1) / (k[top] - k1);
  ++top;
  x[top] = y;
  k[top] = k1;
  b[top] = b1;
}
long double get(long long X) {
  int st = 1, fi = top;
  int re = 1;
  while (st <= fi) {
    int md = (st + fi) / 2;
    if (X < x[md] + ep) {
      st = md + 1;
      re = md;
    } else {
      fi = md - 1;
    }
  }
  return b[re] - (long double)k[re] * X;
}
void solve() {
  int k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= (int)(n); ++i) scanf("%d", &a[i]);
  for (int i = 1; i <= (int)(n); ++i) {
    su[i] = su[i - 1] + a[i];
    A[i] = A[i - 1] + (long double)su[i] / a[i];
    B[i] = B[i - 1] + (long double)1.0 / a[i];
  }
  for (int i = 1; i <= (int)(n); ++i) {
    long long S = su[i - 1];
    dp[1][i] = A[n] - A[i - 1] - (long double)S * (B[n] - B[i - 1]);
  }
  for (int u = 2; u <= k; ++u) {
    top = 0;
    for (int i = (int)(n - u + 1); i >= 1; --i) {
      long long S = su[i - 1];
      long double val = (-A[i - 1] + (long double)S * B[i - 1]);
      update(u, i);
      long double pat = get(S);
      dp[u][i] = val + pat;
    }
  }
  cout << dp[k][1] << endl;
}
void testgen() {
  FILE* f = fopen("input.txt", "w");
  fclose(f);
}
int main() {
  std::cout << std::fixed;
  std::cout.precision(8);
  std::cerr << std::fixed;
  std::cerr.precision(3);
  solve();
  return 0;
}
