#include <bits/stdc++.h>
using namespace std;
const long double PI = acos(-1.0);
const int MAXN = 200001;
int n, k;
int t[MAXN];
long long s[MAXN];
long double f[MAXN];
long double sp[MAXN];
long double s2[MAXN];
int st[MAXN], b[MAXN];
int stc;
const long double e = 1e-10;
inline long double g(int l, int r) {
  return (sp[r] - sp[l]) - (long double)(s[l]) * (s2[r] - s2[l]);
}
inline int bt(int i1, int i2) {
  long double vl = f[i2] - f[i1] - g(i1, i2);
  if (vl < e) return i2 + 1;
  long double nd = (vl / (long double)(s[i2] - s[i1]));
  return upper_bound(s2, s2 + n + 1, nd + s2[i2]) - s2;
}
int main() {
  cin >> n >> k;
  s[0] = 0;
  for (int i = 0; i < n; i++) {
    cin >> t[i];
    s[i + 1] = s[i] + t[i];
  }
  sp[0] = 0;
  long double cur = 0;
  for (int i = 0; i < n; i++) {
    cur += t[i];
    sp[i + 1] = sp[i] + cur / (long double)t[i];
  }
  s2[0] = 0;
  for (int i = 0; i < n; i++) {
    s2[i + 1] = s2[i] + 1.0 / (long double)t[i];
  }
  f[0] = 0;
  for (int i = 1; i <= n; i++) f[i] = 1e+20;
  for (int iter = 0; iter < k; iter++) {
    stc = 0;
    b[0] = 1;
    for (int i = 0; i < n; i++) {
      int db = 1;
      while (stc > 0) {
        db = bt(st[stc - 1], i);
        if (db > b[stc - 1]) break;
        stc--;
      }
      b[stc] = db;
      st[stc++] = i;
    }
    b[stc] = n + 1;
    for (int i = stc - 1; i >= 0; i--) {
      for (int j = b[i]; j < b[i + 1]; j++) {
        f[j] = f[st[i]] + g(st[i], j);
      }
    }
  }
  cout.setf(ios::fixed);
  cout.precision(20);
  cout << f[n] << endl;
  return 0;
}
