完善程序:给定一个长度为n且从小到大排好序的序列{a1,a2,a3,...,an},要把这个序列分成 k 段,每段的价值为该段中的最大值减去最小值,现在请你帮忙分段,使得各分段的价值之和最小(保证计算结果都在int范围内)。
#include <bits/stdc++.h> using namespace std; const int N=3e5+5; int n,k,sum,a[N],b[N]; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<n;i++) b[i]= ① ; if( ② ) printf("0\n"); else if(k==1) ③ else { sort(b+1,b+n); sum=0; for(int i=1;i<= ④ ;i++) printf("%d\n",sum); } return 0; }
第①空应填写?
a[i]-a[i-1]
a[i+1]-a[i]
b[i]+a[i]
b[i]+a[i]-a[i-1]
第②空应填写?
n=k
n>k
n==k
n!=k
第③空应填写?
printf("%d\n",a[n]+a[1]);
printf("%d\n",a[n]-a[1]);
printf("%d\n",b[n]+b[1]);
printf("%d\n",b[n]-b[1]);
第④空应填写?
n-k
n-k+1
k
k-1
第⑤空应填写?
sum=sum+b[i]-a[i];
sum=sum+b[i]+a[i];
sum=sum+a[i];
sum=sum+b[i];