#include <bits/stdc++.h>
using namespace std;
long double INF = -1.0;
int n, k, i, j;
long double t[200002];
long double S[200002], P[200002], F[200002], B[200002];
long double dp[200002][52];
vector<pair<pair<long double, long double>, pair<long double, long double> > >
    v[52];
int D[52];
void avel(int h, pair<long double, long double> pb) {
  int i;
  for (i = D[h] - 1; i >= 0; i--) {
    long double x1 =
        (pb.second - v[h][i].first.second) / (pb.first - v[h][i].first.first);
    if (x1 < v[h][i].second.first) {
      D[h]--;
      if (D[h] > 0) v[h][i - 1].second.second = INF;
    } else {
      v[h][i].second.second = x1;
      D[h] = i + 2;
      if ((int)(v[h].size()) < D[h])
        v[h].push_back(make_pair(pb, make_pair(x1, INF)));
      else
        v[h][D[h] - 1] = make_pair(pb, make_pair(x1, INF));
      return;
    }
  }
  D[h] = 1;
  if ((int)(v[h].size()) == 0)
    v[h].push_back(make_pair(pb, make_pair(0, INF)));
  else
    v[h][0] = make_pair(pb, make_pair(0, INF));
}
long double gtnel(int h, long double x1) {
  long double answ = 0;
  int s1 = 0;
  int e1 = D[h] - 1;
  while (s1 <= e1) {
    int m = (s1 + e1) / 2;
    if (x1 < v[h][m].second.first)
      e1 = m - 1;
    else if (v[h][m].second.second == -1 || x1 < v[h][m].second.second)
      return v[h][m].first.second - v[h][m].first.first * x1;
    else
      s1 = m + 1;
  }
  return answ;
}
int main() {
  scanf("%d%d", &n, &k);
  cout.setf(ios::fixed);
  cout.precision(10);
  for (i = 1; i <= n; i++) {
    double u;
    scanf("%lf", &u);
    t[i] = (long double)u;
    P[i] = P[i - 1] + t[i];
    F[i] = F[i - 1] + 1 / t[i];
    S[i] = S[i - 1] + (1 / t[i]) * P[i - 1] + 1;
  }
  for (i = 1; i <= n; i++) {
    dp[i][1] = S[i];
    avel(1, make_pair(P[i], dp[i][1] + F[i] * P[i] - S[i]));
  }
  for (j = 2; j <= k; j++) {
    dp[j][j] = j;
    avel(j, make_pair(P[j], dp[j][j] + F[j] * P[j] - S[j]));
    for (i = j + 1; i <= n; i++) {
      dp[i][j] = S[i] + gtnel(j - 1, F[i]);
      avel(j, make_pair(P[i], dp[i][j] + F[i] * P[i] - S[i]));
    }
  }
  cout << dp[n][k] << endl;
  return 0;
}
