#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5e5 + 7;
const long long maxk = 5e1 + 7;
const long long mod = 1e9 + 7;
const long long INF = 1e16 + 7;
const long long mlog = 20;
const long long SQ = 400;
long long n, k;
long long ps[maxn];
double rev[maxn], dp[maxn][maxk];
double cost(long long l, long long r, long long k) {
  return l > r++ ? +INF
                 : dp[l][--k] + dp[r][1] - dp[l][1] - ps[l] * (rev[r] - rev[l]);
}
void solve(long long l, long long r, long long optl, long long optr,
           long long k) {
  if (l >= r) return;
  long long mid = (l + r) / 2;
  long long optm = optl;
  dp[mid + 1][k] = cost(optm, mid, k);
  for (long long i = optl; i < optr; i++)
    if (cost(i, mid, k) < dp[mid + 1][k])
      dp[mid + 1][k] = cost(optm = i, mid, k);
  solve(l, mid, optl, optm + 1, k), solve(mid + 1, r, optm, optr, k);
}
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(), cout.tie();
  ;
  cin >> n >> k;
  for (long long i = 1; i <= n; i++) {
    long long x;
    cin >> x;
    ps[i] = x;
    dp[i][1] = dp[i - 1][1] + 1.0 * ps[i - 1] / ps[i] + 1;
    rev[i] = rev[i - 1] + 1.0 / ps[i];
    ps[i] += ps[i - 1];
  }
  for (long long i = 2; i <= k; i++) solve(0, n, 0, n, i);
  cout << fixed << dp[n][k] << "\n";
  return 0;
}
