题目链接:传送门
思维题
由于这个序列单调不减
所以a[1]=0的差分数组的和就是这个序列为1段的答案
现在要分成k段,所以我们有k-1次操作
要用这k-1次操作使答案最小
那就对差分数组排序减去最大的k-1个
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define
#define
using namespace std;
typedef long long ll;
int n, k, a[A], c[A], ans;
int main(int argc, char const *argv[]) {
cin >> n >> k; k--;
for (int i = 1; i <= n; i++){
cin >> a[i];
if (i == 1) {c[i] = 0; continue;}
c[i] = a[i] - a[i - 1], ans += c[i];
}
sort(c + 1, c + n + 1, [](int a, int b) -> bool {return a > b;});
for (int i = 1; i <= k; i++) ans -= c[i];
cout << ans << endl;
}