#include using namespace std; typedef long long ll; typedef vector vi; typedef vector vl; typedef pair pii; typedef pair pll; typedef int _loop_int; #define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i) #define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i) #define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i) #define DEBUG(x) cout<<#x<<": "< P; const int T = 2000; int n,m; Real c[125]; Real dp[2][T][125]; Real indfs(int x,int y,int z); inline Real dfs(int x,int y,int z){ if(dp[x][y][z]!=-1)return dp[x][y][z]; // dp[x][y][z] = indfs(x,y,z); // printf("%d %d %d -> %f\n",x,y,z,dp[x][y][z]); // return dp[x][y][z]; return dp[x][y][z] = indfs(x,y,z); } Real indfs(int x,int y,int z){ if(y==T-1)return c[z]; if(z==n-1)return 0.0; if(x==1){ // can't use Real ans = 0.0; FOR(i,1,m+1){ ans += dfs(x,y+1,min(z+i,2*n-2-z-i)); } return ans/(Real)m + c[z]; }else{ // can use // don't use Real a = 0.0; FOR(i,1,m+1)a += dfs(x,y+1,min(z+i,2*n-2-z-i)); a /= (Real)m; Real b = 1.0e25; FOR(i,1,m+1)CHMIN(b,dfs(1,y+1,min(z+i,2*n-2-z-i))); return min(a,b) + c[z]; } } int main(){ scanf("%d%d",&n,&m); c[0] = 0.0; c[n-1] = 0.0; FOR(i,1,n-1)scanf("%lf",c+i); REP(i,2)REP(j,T)REP(k,n)dp[i][j][k] = -1; Real ans = dfs(0,0,0); printf("%.12f\n",ans); return 0; }