#include <bits/stdc++.h>
using namespace std;
const int N = 201110, K = 55;
int a[N], opt[N];
double dp[N][K], S[N], P[N], Q[N];
int n, k, now, last;
double cal(int w, int u, int i) {
  return dp[u][w] + P[i] - P[u] - S[u] * (Q[i] - Q[u]);
}
double getG(int w, int u, int v) {
  return (dp[u][w] - dp[v][w] - (P[u] - P[v]) + (S[u] * Q[u] - S[v] * Q[v])) *
         1.0 / (S[u] - S[v]);
}
bool ccw(int w, int r, int u, int v) { return getG(w, u, r) <= getG(w, v, u); }
int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    S[i] = S[i - 1] + a[i];
    P[i] = P[i - 1] + S[i] * 1.0 / a[i];
    Q[i] = Q[i - 1] + 1.0 / a[i];
  }
  for (int w = 0; w <= k; w++)
    for (int i = 0; i <= n; i++) dp[i][w] = 1e15;
  dp[0][0] = 0;
  for (int w = 1; w <= k; w++) {
    opt[now = last = 1] = 0;
    for (int i = 1; i <= n; i++) {
      while (now < last &&
             cal(w - 1, opt[now], i) >= cal(w - 1, opt[now + 1], i))
        now++;
      dp[i][w] = cal(w - 1, opt[now], i);
      while (now < last && ccw(w - 1, i, opt[last], opt[last - 1])) last--;
      opt[++last] = i;
    }
  }
  printf("%.5f\n", dp[n][k]);
}
