#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target( \
    "avx,avx2,fma,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const int N = 200000;
pair<long double, long double> mas[N];
long long last = 0;
void add(long double k, long double b) {
  while (last > 1) {
    long double x1 = (mas[last - 1].second - mas[last - 2].second) /
                     (mas[last - 2].first - mas[last - 1].first);
    long double x2 = (mas[last - 1].second - b) / (k - mas[last - 1].first);
    if (x1 < x2) {
      break;
    } else {
      last--;
    }
  }
  mas[last] = {k, b};
  last++;
}
long double get(long double x) {
  long long L = 0, R = last;
  while (R - L > 1) {
    long long mm = (R + L) / 2;
    long double x1 = ((mas[mm - 1].second - mas[mm].second)) /
                     (mas[mm].first - mas[mm - 1].first);
    if (x1 <= x) {
      L = mm;
    } else {
      R = mm;
    }
  }
  return mas[L].first * x + mas[L].second;
}
long long MOD = 1e9 + 7;
long long INF = 1e18;
const int K = 51;
long double dp[K][N];
long double sm[N];
long double rs[N];
long double eps = 1e-5;
signed main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0),
      cout << fixed << setprecision(20);
  long long n, k;
  cin >> n >> k;
  long long smm = 0;
  vector<long long> t(n);
  for (int i = 0; i < n; i++) {
    cin >> t[i];
  }
  for (int i = 0; i < n; i++) {
    if (i) dp[1][i] = dp[1][i - 1] + smm * 1.0 / (long double)t[i];
    smm += t[i];
    sm[i] = t[i];
    if (i) sm[i] += sm[i - 1];
    rs[i] = 1.0 / (long double)t[i];
    if (i) rs[i] += rs[i - 1];
  }
  for (int j = 2; j <= k; j++) {
    for (int i = 0; i < n; i++) {
      add(-sm[i], dp[j - 1][i] - dp[1][i] + rs[i] * sm[i]);
    }
    for (int i = 1; i < n; i++) {
      dp[j][i] = get(rs[i]) + dp[1][i];
    }
    last = 0;
    for (int i = 0; i < N; i++) {
      mas[i] = {0, 0};
    }
  }
  cout << n + dp[k][n - 1];
}
