代码如下:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int n,k;
int a[300000];
int dis[300000]; //计算前后两个数之间的差值;
while(scanf("%d %d",&n,&k) != EOF && n){
int i,dislen = n-1;
long long sum = 0;
for(i = 0;i < n;i++){
scanf("%d",&a[i]);
if(i != 0){
dis[i-1] = a[i] - a[i-1];
sum += dis[i-1]; //所有差值之间的和
}
}
sort(dis,dis+dislen);
for(i = dislen-1;i > dislen-k;i--){
sum-=dis[i]; //sum减掉 dis数组里最大的 k-1 个最大的数值
}
cout << sum << endl;
}
}
个人解释:
a b c d e f
b-a c-b d-c e-d f-e
那么 (b-a)+(c-b) = c-a
(b-a)+(c-b)+(d-c)+(e-d)+(f-e) = f - a