Problem: problem

AOR Ika got a water tank with a size of $ 1 $ in length and $ N $ in width. The aquarium is tall enough to hold water. The aquarium has $ N-1 $ partitions and is evenly spaced into $ N $ compartments. When water was poured here, the height of the water in each section became $ a_i $.

AOR Ika decided to remove some dividers and reduce the number of compartments to $ M $ or less. When you have removed the dividers, find the maximum sum of the water heights in each compartment.

The thickness of the partition can be ignored.



input

$ N \ M $
$ a_1 \ cdots a_N $

output

Output the maximum value of the total water height of each section in one line. Also, output a line break at the end. It is acceptable if the relative or absolute error is less than or equal to $ 10 ^ {-6} $.

Example

Input

5 3
9 1 2 3 9


Output

20.000000

Solution (in CPP):

Solution:
// {{{
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <complex>
#include <cstdint>
#include <cstdio>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <tuple>
#include <utility>
#include <vector>
using namespace std;
// }}}

using ll = long long;

int N, M, a[505];

struct S {
    int water, width;
    S () {}
    S(int water, int width) : water(water), width(width) {}
};

double dp[505][505];

int main() {
    cin >> N >> M;
    for (int j = 1; j <= N; ++j) { cin >> a[j]; }

    double b[505]; b[0] = 0;
    for (int j = 1; j <= N; ++j) b[j] = b[j-1] + a[j];

    for (int i = 0; i <= N; ++i) {
        for (int j = 0; j <= M; ++j) dp[i][j] = -1;
    }
    dp[0][0] = 0;

    for (int r = 1; r <= N; ++r) {
        for (int m = M; m >= 1; --m) {
            for (int i = 0; i < r; ++i) {
                if (dp[i][m-1] >= 0) {
                    dp[r][m] = max(dp[r][m], dp[i][m-1] + (double) (b[r] - b[i]) / (r - i));
                }
            }
        }
    }

    cout << fixed << setprecision(10) << dp[N][M] << endl;

    return 0;
}