#include <bits/stdc++.h>
using namespace std;
const int maxn = (int)2e5 + 5;
const int maxk = 55;
long double a[maxn], ra[maxn], S[maxn], R[maxn], Q[maxn];
long double dp[maxk][maxn];
long double inters(const pair<long double, long double> &a,
                   const pair<long double, long double> &b) {
  if (fabs(a.first - b.first) > 1e-9)
    return (b.second - a.second) / (a.first - b.first);
  else {
    if (a.second > b.second)
      return -1e18;
    else
      return 1e18;
  }
}
void add_line(vector<pair<long double, long double> > &st1,
              vector<pair<long double, long double> > &st2,
              pair<long double, long double> nw) {
  while (st1.size() > 0 && st2.back().first > inters(st1.back(), nw)) {
    st1.pop_back(), st2.pop_back();
  }
  assert(st1.size() > 0 && st1.size() == st2.size());
  st2.back().second = inters(st1.back(), nw);
  st2.push_back(make_pair(inters(st1.back(), nw), 1e18));
  st1.push_back(nw);
}
long double getf(vector<pair<long double, long double> > &st1,
                 vector<pair<long double, long double> > &st2, long double x) {
  int id =
      lower_bound(st2.begin(), st2.end(), make_pair(x, x - 1.)) - st2.begin();
  id--;
  assert(id >= 0 && id < (int)st1.size());
  return x * st1[id].first + st1[id].second;
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) {
    int xx;
    scanf("%d", &xx);
    a[i] = xx;
    ra[i] = 1. / a[i];
  }
  a[0] = ra[0] = 0;
  S[0] = R[0] = Q[0] = 0;
  for (int i = 1; i <= n; i++) {
    S[i] = S[i - 1] + ra[i];
    R[i] = R[i - 1] + a[i] * S[i];
    Q[i] = Q[i - 1] + a[i];
  }
  dp[0][0] = 0;
  for (int i = 1; i <= n; i++) dp[0][i] = 1e15;
  for (int j = 1; j <= k; j++) {
    vector<pair<long double, long double> > st1;
    vector<pair<long double, long double> > st2;
    st1.push_back(make_pair(0, 1e15));
    st2.push_back(make_pair(-1e18, 1e18));
    for (int i = 0; i <= n; i++) {
      dp[j][i] = getf(st1, st2, S[i]) - R[i] + S[i] * Q[i];
      add_line(st1, st2, make_pair(-Q[i], dp[j - 1][i] + R[i]));
    }
  }
  cout << dp[k][n] + (long double)n << "\n";
  return 0;
}
