题目链接:Codeforces - Array Splitting
考虑如果分成3堆。那么答案为:
a[i]-a[1] + a[j]-a[i+1] + a[n]-a[j+1]
所以其实就是 a[n]-a[1] 然后减去k-1个最大的相邻间的差值。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=3e5+10;
int n,k,a[N],res;
vector<int> v;
signed main(){
cin>>n>>k;
if(n==k) return puts("0"),0;
for(int i=1;i<=n;i++){
cin>>a[i]; if(i>1) v.push_back(a[i]-a[i-1]);
}
sort(v.begin(),v.end(),greater<int>()); res=a[n]-a[1];
for(int i=0;i<k-1;i++) res-=v[i];
cout<<res;
return 0;
}