#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
long long pw(long long a, long long b) {
  long long ret = 1;
  long long mul = a;
  while (b > 0) {
    if (b & 1) ret = (ret * mul);
    mul = (mul * mul);
    b /= 2;
  }
  return ret;
}
long long to_int(string s) {
  long long ret = 0;
  for (int(i) = (0); (i) < (s.size()); (i)++) {
    ret += pw(10, s.size() - i - 1) * (long long)(s[i] - '0');
  }
  return ret;
}
const int MAXN = 2e5 + 25, MAXK = 5e1 + 5.1;
const long double inf = 1e15 + 19;
int n, k, a[MAXN];
long long psn[MAXN];
long double dp[MAXK][MAXN], psd[MAXN], ps[MAXN];
long double get(int l, int r) {
  long double ret = ps[r];
  if (l) {
    ret -= ps[l - 1] + psn[l - 1] * (psd[r] - psd[l - 1]);
  }
  return ret;
}
void solve(int j, int l, int r, int opl, int opr) {
  if (r - l < 1 or opr - opl < 1) return;
  int mid = (l + r) / 2, opmid = opl;
  for (int(i) = (opl); (i) < (min(mid, opr)); (i)++) {
    if (dp[j - 1][i] + get(i + 1, mid) < dp[j][mid])
      dp[j][mid] = dp[j - 1][i] + get(i + 1, mid), opmid = i;
  }
  solve(j, l, mid, opl, opmid + 1), solve(j, mid + 1, r, opmid, opr);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ;
  for (int(i) = (0); (i) < (MAXK); (i)++)
    for (int(j) = (0); (j) < (MAXN); (j)++) dp[i][j] = inf;
  cin >> n >> k;
  for (int(i) = (0); (i) < (n); (i)++)
    cin >> a[i], psn[i] = a[i], psd[i] = 1.0 / a[i];
  for (int(i) = (0); (i) < (n - 1); (i)++)
    psn[i + 1] += psn[i], psd[i + 1] += psd[i];
  dp[1][0] = ps[0] = 1;
  for (int(i) = (1); (i) < (n); (i)++)
    dp[1][i] = ps[i] = ps[i - 1] + (1.0 * psn[i] / a[i]);
  for (int(j) = (2); (j) < (k + 1); (j)++) solve(j, 0, n, 0, n);
  cout << fixed << setprecision(10) << dp[k][n - 1] << "\n";
}
