#include <bits/stdc++.h>
using namespace std;
mt19937 rand1(chrono::high_resolution_clock::now().time_since_epoch().count());
long long randlr(long long l, long long r) { return rand1() % (r - l + 1) + l; }
long double dp[59][200009];
long double mx[59];
const long double inf = 1e17;
struct Line {
  long double k, b;
  long double l, r;
  Line(){};
  Line(long double _k, long double _b) {
    k = _k;
    b = _b;
    l = -inf;
    r = inf;
  }
};
deque<Line> conv[51];
bool operator<(Line a, const long double first) { return a.r < first; }
inline long double inters(Line &a, Line &b) {
  return (b.b - a.b) / (a.k - b.k);
}
inline long double gety(Line &a, long double first) {
  return a.k * first + a.b;
}
inline void add(deque<Line> &st, long double k, long double b) {
  Line ne(k, b);
  while (st.size() > 1 && inters(st[1], ne) > st.front().r) {
    st.pop_front();
  }
  if (st.size()) {
    ne.r = inters(st.front(), ne);
    st[0].l = ne.r;
  }
  st.push_front(ne);
}
inline long double getmax(deque<Line> &st, long double first) {
  if (st.size() == 0) return 0;
  auto ret = lower_bound(st.begin(), st.end(), first);
  return gety(*ret, first);
}
signed main() {
  ios ::sync_with_stdio(0);
  cin.tie(0);
  long long n, k;
  cin >> n >> k;
  vector<long long> a(n);
  vector<long long> pref(n + 1, 0);
  vector<long double> preffr(n + 1, 0);
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    pref[i + 1] = pref[i] + a[i];
    preffr[i + 1] = preffr[i] + (long double)1 / (long double)a[i];
  }
  long double sum = 0;
  for (long long i = 0; i < n; i++) {
    sum += (long double)pref[i + 1] / a[i];
  }
  k--;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < min(i + 1, k); j++) {
      dp[j + 1][i] =
          max(dp[j + 1][i],
              (long double)(pref[i + 1]) * (preffr[n] - preffr[i + 1]) +
                  getmax(conv[j], (preffr[n] - preffr[i + 1])));
    }
    for (long long j = 0; j < min(i + 1, k); j++) {
      add(conv[j + 1], -pref[i + 1], dp[j + 1][i]);
      if (mx[j + 1] < dp[j + 1][i]) {
        mx[j + 1] = dp[j + 1][i];
      }
    }
  }
  cout << setprecision(35) << fixed << sum - mx[k];
  return 0;
}
