#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read(register T& t) {
  register T f = 1;
  register char ch = getchar();
  t = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') t = t * 10 + ch - '0', ch = getchar();
  t *= f;
  return t;
}
template <typename T, typename... Args>
inline void read(T& t, Args&... args) {
  read(t);
  read(args...);
}
const long long p = 998244353;
inline long long power(register long long x, register long long k = p - 2) {
  register long long re = 1;
  for (; k; k >>= 1, x = x * x % p)
    if (k & 1) re = re * x % p;
  return re;
}
int n, k;
int t[200005];
double Sum[200005], Sumb[200005], Sumc[200005];
double f[51][200005];
int ti;
inline double slope(int a, int b) {
  return ((f[ti - 1][a] - Sumc[a] + Sum[a] * Sumb[a]) -
          (f[ti - 1][b] - Sumc[b] + Sum[b] * Sumb[b])) /
         (Sum[a] - Sum[b]);
}
int main() {
  read(n, k);
  for (int i = 1; i <= n; i++) read(t[i]);
  for (int i = 1; i <= n; i++) Sum[i] = Sum[i - 1] + t[i];
  for (int i = 1; i <= n; i++) Sumb[i] = Sumb[i - 1] + 1.0 / t[i];
  for (int i = 1; i <= n; i++) Sumc[i] = Sumc[i - 1] + Sum[i] / t[i];
  for (int i = 1; i <= n; i++) f[1][i] = Sumc[i];
  for (ti = 2; ti <= k; ti++) {
    deque<int> q;
    q.push_back(ti - 1);
    for (int i = ti; i <= n; i++) {
      while (q.size() > 1 && slope(q[1], q[0]) < Sumb[i]) q.pop_front();
      int k = q.front();
      f[ti][i] =
          f[ti - 1][k] + Sumc[i] - Sumc[k] - Sum[k] * (Sumb[i] - Sumb[k]);
      while (q.size() > 1 &&
             slope(i, q[q.size() - 2]) > slope(i, q[q.size() - 1]))
        q.pop_back();
      q.push_back(i);
    }
  }
  printf("%.10lf\n", f[k][n]);
  return 0;
}
