#include <bits/stdc++.h>
using namespace std;
using namespace std;
inline long long powmod(long long a, long long first, long long mod) {
  a %= mod;
  long long t = 1LL;
  while (first) {
    if (first & 1) t = t * a % mod;
    a = a * a % mod;
    first >>= 1;
  }
  return t;
}
const int MAXN = 2e5 + 5;
double exc[MAXN], sum[MAXN], rev[MAXN];
double t[MAXN];
double dp[MAXN][55];
inline double second(int first, int p) {
  return dp[first][p] - exc[first] + sum[first] * rev[first];
}
inline double g(int j, int k, int p) {
  return (second(j, p) - second(k, p)) / (sum[j] - sum[k]);
}
inline double cal(int l, int i) {
  return exc[i] - exc[l] - (rev[i] - rev[l]) * sum[l];
}
int q[MAXN], top, tail;
inline void add(int i, int k) {
  while (top < tail - 1 &&
         g(i, q[tail - 1], k) < g(q[tail - 1], q[tail - 2], k))
    tail--;
  q[tail++] = i;
}
inline int getmax(int i, int k) {
  while (top < tail - 1 && g(q[top + 1], q[top], k) < rev[i]) top++;
  return q[top];
}
int main() {
  int n, i, K, k;
  scanf("%d%d", &n, &K);
  for (i = 1; i <= n; i++) scanf("%lf", &t[i]);
  for (i = 1; i <= n; i++) {
    sum[i] = sum[i - 1] + t[i];
    rev[i] = rev[i - 1] + 1.0 / t[i];
    exc[i] = exc[i - 1] + sum[i] / t[i];
  }
  for (i = 1; i <= n; i++) dp[i][1] = exc[i];
  for (k = 2; k <= K; k++) {
    top = tail = 0;
    q[tail++] = 0;
    for (i = 1; i <= n; i++) add(i, k - 1);
    for (i = 1; i <= n; i++) {
      if (i >= k) {
        int l = getmax(i, k - 1);
        dp[i][k] = dp[l][k - 1] + cal(l, i);
      } else
        dp[i][k] = 10000000000000000.0;
    }
  }
  printf("%.10f\n", dp[n][K]);
}
