思路
- 题意:把n个元素分成k组,使得每一组的最大最小值差的和最小
- 做法:其实问的就是把两个相邻数字的间隔求出来,然后把其中k-1个大的间隔减掉即可
代码
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=3e5+5;
int a[N];
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,k;
cin >> n >> k;
for(int i=0;i<n;i++)cin >> a[i];
sort(a,a+n);
int res=a[n-1]-a[0];
for(int i=0;i<n-1;i++){
a[i]=a[i+1]-a[i];
}
sort(a,a+n-1,cmp);
for(int i=0;i<k-1;i++){
res-=a[i];
}
cout << res;
}