首先将x升序排序。 如果一个基站覆盖了第l到第r号车站(l<=r),那其最小的x是X_r-X_l,要让x的和尽量小,每个基站覆盖的车站范围应该不相交:
称两个相邻车站间的距离是一个“区间”,
有m个基站,那就有(m-1)个空挡区间,那么则有(n-1)-(m-1)=n-m个区间要取,取前n-m小的区间就可以。
/*
using C++20 standard
upd:25.10.16
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long ul;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef tuple<ll,ll,ll> tll;
#define fastio ios::sync_with_stdio(0);cin.tie(0);
#define fin freopen("D:/in.txt","r",stdin);
#define fout freopen("D:/out.txt","w",stdout);
#define lowbit(x) (x&(-x))
const ll maxn=5e5+5;
ll x[maxn],d[maxn];
ll n,m;
int main()
{
cin>>n>>m;
for(ll i=1;i<=n;i++) cin>>x[i];
stable_sort(x+1,x+1+n);
for(ll i=1;i<=n-1;i++) d[i]=x[i+1]-x[i];
stable_sort(d+1,d+1+n-1);
ll ans=0;
for(ll i=1;i<=n-m;i++) ans+=d[i];
cout<<ans<<"\n";
return 0;
}