#include <stdio.h>
int i,j,m,n,t,sum,a[250],b[250];
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
sum=a[n-1]-a[0]+1;
for(i=0;i<n-1;i++)
{
b[i]=a[i+1]-a[i]-1;
}
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(b[j]<b[j+1]){
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
for(i=0;i<m-1;i++)
{
sum-=b[i];
}
printf("%d\n",sum);
}
}
7-4 区间覆盖问题 (20 分)
用i来表示x坐标轴上坐标为[i-1,i]的长度为1的区间,并给出n个不同的整数,表示n个这样的区间。
现在要求画m条线段覆盖住所有的区间,
条件是:每条线段可以任意长,但是要求所画线段的长度之和最小,
并且线段的数目不超过m。
输入格式:
输入包括多组数据,每组数据的第一行表示区间个数n(1≤n≤200) 和所需线段数m(1≤m≤50),第二行表示n个点的坐标i(1≤i≤200)。
输出格式:
每组输出占一行,输出m条线段的最小长度和。
输入样例:
5 3
1 3 8 5 11
输出样例:
7