#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long maxn = 2e5 + 7;
const long long maxe = 1e6 + 7;
const long long INF = 1e9 + 7;
const double PI = acos(-1);
const double eps = 1e-7;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {-1, 1, 0, 0};
int n;
double h[maxn];
const int maxk = 2;
int t[maxn];
long long sum[maxn];
double ex[maxn];
double dp[maxn][maxk];
double y[maxn][maxk];
double x[maxn][maxk];
int sgn(double x) {
  if (abs(x) < eps) return 0;
  if (x > 0) return 1;
  return -1;
}
void init() {
  for (int i = 1; i <= n; i++) {
    h[i] = h[i - 1] + 1.0 / t[i];
    sum[i] = sum[i - 1] + t[i];
    ex[i] = 1.0 * sum[i] / t[i] + ex[i - 1];
  }
}
int que[maxk][maxn];
int head[2];
int tail[2];
double getk(int i, int j, int id) {
  return (y[i][id] - y[j][id]) / (x[i][id] - x[j][id]);
}
void add(int p, int id) {
  y[p][id] = dp[p][id] - ex[p] + sum[p] * h[p];
  x[p][id] = sum[p];
  while (tail[id] - head[id] > 1) {
    double k1 = getk(que[id][tail[id] - 1], p, id);
    double k2 = getk(que[id][tail[id] - 2], que[id][tail[id] - 1], id);
    if (sgn(k1 - k2) != 1) {
      tail[id]--;
      continue;
    } else
      break;
  }
  que[id][tail[id]++] = p;
}
int getmi(double k, int id) {
  while (tail[id] - head[id] > 1) {
    double k1 = getk(que[id][head[id]], que[id][head[id] + 1], id);
    if (sgn(k - k1) != -1) {
      head[id]++;
      continue;
    } else
      break;
  }
  return que[id][head[id]];
}
int k;
int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) cin >> t[i];
  init();
  dp[0][0] = 0;
  add(0, 0);
  int cur = 1;
  int la = 0;
  for (int j = 1; j <= k; j++) {
    head[cur] = tail[cur] = 0;
    for (int i = 1; i <= n; i++) {
      if (dp[i - 1][la] != 0) add(i - 1, la);
      int p = getmi(h[i], la);
      dp[i][cur] = y[p][la] - sum[p] * h[i] + ex[i];
    }
    swap(cur, la);
  }
  printf("%.5f\n", dp[n][la]);
  return 0;
}
