#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int N = 2e5 + 5;
int n, k;
double ve[N], t[N], dp[100][N], tt[N], ttinv[N];
vector<pair<double, double>> cht;
double interx(pair<double, double> r1, pair<double, double> r2) {
  return (r2.second - r1.second) / (r1.first - r2.first);
}
void cht_ins(double a, double b) {
  while (cht.size() > 1 && interx(cht.back(), cht[cht.size() - 2]) >=
                               interx({a, b}, cht[cht.size() - 2]))
    cht.pop_back();
  cht.push_back({a, b});
}
double cht_get(double x) {
  int lo = 1, hi = cht.size(), mid;
  while (lo < hi) {
    mid = (lo + hi) / 2;
    if (interx(cht[mid], cht[mid - 1]) >= x)
      hi = mid;
    else
      lo = mid + 1;
  }
  return cht[lo - 1].first * x + cht[lo - 1].second;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%lf", &t[i]);
    tt[i] = tt[i - 1] + t[i];
    ttinv[i] = ttinv[i - 1] + 1 / t[i];
    dp[1][i] = dp[1][i - 1] + tt[i] / t[i];
    ve[i] = dp[1][i];
  }
  for (int i = 2; i <= k; i++) {
    cht.clear();
    for (int j = i; j <= n; j++) {
      cht_ins(-tt[j - 1],
              tt[j - 1] * ttinv[j - 1] - ve[j - 1] + dp[i - 1][j - 1]);
      dp[i][j] = ve[j] + cht_get(ttinv[j]);
    }
  }
  printf("%lf\n", dp[k][n]);
  return 0;
}
