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