#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<ctime>
#define int long long
using namespace std;
const int N=3e3+10;
const int M=300+10;
const int mins=-1e9;
const int maxs=1e9;
int a[N];
int f[N][M];
int dp[N][M];
int d[N][M];
int n,m;
signed main()
{
// freopen("a.in","r",stdin);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int l=1;l<=n;l++)
{
f[l][l]=0;
for(int r=l+1;r<=n;r++) {
f[l][r]=f[l][r-1]+a[r]-a[l+r>>1];
}
}
sort(a+1,a+1+n);
memset(dp,0x3f,sizeof(dp));
dp[0][0]=0;
for(int j=1;j<=m;j++)
{
d[n+1][j]=n;
for(int i=n;i>=1;i--)
{
int minn=maxs,minid;
for(int k=d[i][j-1];k<=d[i+1][j];k++)
{
if(dp[k][j-1]+f[k+1][i]<minn)
{
minn=dp[k][j-1]+f[k+1][i];
minid=k;
}
}
dp[i][j]=minn;
d[i][j]=minid;
}
}
cout<<dp[n][m];
return 0;
}
第五个点的数据不知道为什么输出了0
求大佬帮忙看一下问题