/*
TASK: bus
LANG: C
*/

//#define DEBUG

#include<stdio.h>

#define MAX 1024
#define MAXIM 1073741823

int n,k;
int h,i,j;
int a[MAX];
int peoplel[MAX],suml[MAX];
int peopler[MAX],sumr[MAX];
int dist[MAX][MAX];
int dp[MAX][MAX];
int d,s1,s2;
int minim=-1;

int main () {
    #ifdef DEBUG
    freopen("test.txt","rt",stdin);
    #endif
    scanf("%d %d",&n,&k);

    for (i=0;i<=n;i++)
        for (j=0;j<=k;j++)
            dp[i][j]=MAXIM;
            
    for (i=1;i<=n;i++)
        scanf("%d",&a[i]);
        
    for (i=1;i<=n;i++) {
        suml[i]=suml[i-1]+peoplel[i-1];
        peoplel[i]=peoplel[i-1]+a[i];
        }
        
    for (i=n;i;i--) {
        sumr[i]=sumr[i+1]+peopler[i+1];
        peopler[i]=peopler[i+1]+a[i];
        }

    for (i=2;i<=n;i++)
        for (h=i-1;h>0;h--) {
            d=i-h-1;
            if (d) {
               d=h-1+(d>>1);
               dist[i][h]=sumr[h]-sumr[d+1]-peopler[d+1]*(d-h+1);
               d++;
               dist[i][h]+=suml[i]-suml[d-1]-peoplel[d-1]*(i-d+1);
               }
            else dist[i][h]=0;
            }

    dp[1][1]=0;
    for (i=2;i<n;i++)
        for (j=2;j<k;j++)
            for (h=i-1;h>0;h--) {
//                if (dp[h][j-1]<MAXIM&&dp[h][j-1]+s1+s2>dp[i][j]) break;
                if (dp[i][j]>dp[h][j-1]+dist[i][h])
                   dp[i][j]=dp[h][j-1]+dist[i][h];
                }

    for (j=2;j<=k;j++) {
        for (h=i-1;h;h--) {
//            if (dp[h][j-1]+s1+s2>dp[i][j]) break;
            if (dp[h][j-1]+dist[i][h]<dp[i][j])
               dp[i][j]=dp[h][j-1]+dist[i][h];
            }
        if (minim==-1||minim>dp[i][j])
           minim=dp[i][j];
        }

    printf("%d\n",minim);
    return 0;
    }
