0
点赞
收藏
分享

微信扫一扫

CF1197C Array Splitting


题目链接:​​传送门​​

思维题
由于这个序列单调不减
所以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;
}


举报

相关推荐

0 条评论