#include <bits/stdc++.h>
using namespace std;
const double inf = 1e18 + 5;
const int N = 2e5 + 5;
const int K = 55;
double z[K][N];
int a[N];
int cnt[N];
int answer[N];
int d[N];
int p[N];
int n, g;
double sum1[N];
double sum2[N];
double sum[N];
double solvmi(int i, int j) {
  double sum = 0.0, res = 0.0;
  for (int k = i; k <= j; k++) {
    sum += p[k];
    res += sum / p[k];
  }
  return res;
}
double calc(int i, int j) {
  if (z[i][j] != -1.0) {
    return z[i][j];
  }
  if (i == n && j == g) return 0.0;
  if (i >= n || j >= g) return inf;
  double ans = inf;
  double sum = 0.0, res = 0.0;
  for (int k = i; k < n; k++) {
    sum += p[k];
    res += sum / p[k];
    ans = min(ans, calc(k + 1, j + 1) + res);
  }
  cout << i << " " << j << " " << ans << endl;
  return z[i][j] = ans;
}
double solvmi2(int i, int j) {
  double sum = 0.0, res = 0.0;
  for (int k = j; k >= i; k--) {
    sum += p[k];
    res += sum / p[k];
  }
  return res;
}
double getmi(int i, int j) {
  return sum1[j] - sum1[i - 1] - (sum[i - 1] * (sum2[j] - sum2[i - 1]));
}
inline void calc(int i, int l, int r, int kl, int kr) {
  if (l > r) return;
  int mid = (l + r) >> 1;
  z[i][mid] = inf;
  int idx = mid;
  for (int k = kl; k <= min(mid, kr); k++) {
    if (z[i - 1][k - 1] + getmi(k, mid) < z[i][mid]) {
      idx = k;
      z[i][mid] = z[i - 1][k - 1] + getmi(k, mid);
    }
  }
  calc(i, l, mid - 1, kl, idx);
  calc(i, mid + 1, r, idx, kr);
}
int main() {
  scanf("%d %d", &n, &g);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &p[i]);
  }
  for (int i = 1; i <= n; i++) {
    sum[i] = p[i] + sum[i - 1];
    sum1[i] = sum1[i - 1] + (double)sum[i] / (double)p[i];
    sum2[i] = sum2[i - 1] + 1.0 / (double)p[i];
  }
  z[0][0] = 0;
  for (int j = 1; j <= n; j++) z[0][j] = inf;
  for (int i = 1; i <= g; i++) {
    z[i][0] = inf;
    calc(i, 1, n, 1, n);
  }
  printf("%.8f\n", (double)z[g][n]);
}
