#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
long double p[maxn];
long long a[maxn];
long double h[maxn];
long double g[maxn];
long double dp[maxn][51];
vector<pair<long double, long double>> cht[51];
vector<long double> points[51];
long double get(pair<long double, long double> &a,
                pair<long double, long double> &b) {
  return (a.second - b.second) / (b.first - a.first);
}
void add(int t, pair<long double, long double> cur) {
  while (cht[t].size() > 1 &&
         get(cht[t][cht[t].size() - 2], cur) <= points[t].back()) {
    points[t].pop_back();
    cht[t].pop_back();
  }
  if (!cht[t].empty()) points[t].push_back(get(cur, cht[t].back()));
  cht[t].push_back(cur);
}
long double ask(int t, long double first) {
  if (cht[t].empty()) return 5e18;
  int it = 0;
  if (points[t].size() != 0)
    it = lower_bound(points[t].begin(), points[t].end(), first) -
         points[t].begin();
  return cht[t][it].first * first + cht[t][it].second;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < maxn; i++)
    for (int j = 0; j < 51; j++) dp[i][j] = 5e18;
  dp[0][0] = 0;
  add(0, {(long double)0, (long double)0});
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    p[i + 1] += a[i];
    g[i + 1] += 1 / (long double)a[i];
  }
  for (int i = 1; i <= n; i++) {
    p[i] += p[i - 1];
    g[i] += g[i - 1];
    h[i] = h[i - 1] + (long double)p[i] / a[i - 1];
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= k; j++) {
      dp[i][j] = ask(j - 1, g[i]) + h[i];
    }
    for (int j = 1; j <= k; j++) add(j, {-p[i], dp[i][j] - h[i] + p[i] * g[i]});
  }
  cout << setprecision(19) << fixed << dp[n][k];
  return 0;
}
