这场好多公式化简哦,根据递推公式维护一个minv即可
#define int ll
int v[MAXN],dp[MAXN];
signed main()
{
int n,k;cin>>n>>k;
rpp(i,n) cin>>v[i];
sort(v+1,v+n+1);
if(n<k+k)
{
cout<<v[n]-v[1]<<endl;
return 0;
}
for(int i=1;i<(k*2);++i) dp[i] = v[i]-v[1];
int minv= dp[k]-v[k+1];
for(int i=k+k;i<=n;++i)
{
dp[i]=v[i]-v[1];
minv=min(minv,dp[i-k]-v[i-k+1]);
dp[i]=min(dp[i],v[i]+minv);
}
cout<<dp[n]<<endl;
return 0;
}