天天看点

sdutacm-区间覆盖问题

区间覆盖问题

TimeLimit: 1000MS Memory Limit: 65536KB

SubmitStatistic

Problem Description

 用i来表示x坐标轴上坐标为[i-1,i]的长度为1的区间,并给出n(1≤n≤200)个不同的整数,表示n个这样的区间。

现在要求画m条线段覆盖住所有的区间,

条件是:每条线段可以任意长,但是要求所画线段的长度之和最小,

并且线段的数目不超过m(1≤m≤50)。

Input

 输入包括多组数据,每组数据的第一行表示点n,和所需线段数m,后面的n行表示点的坐标

Output

 输出每组输出占一行表示线段的长度。

Example Input

5 3

1 3 8 5 11

Example Output

7

Hint

Author

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;



int cmp( const void*a,const void*b)
{


  return *(int *)b-*(int *)a;
}
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {

       int sum = 0,i,position[1000],distance[1000];
       for(i = 0;i<n;i++)
       {
          scanf("%d",&position[i]);
       }
       if(m>=n)
       {
          printf("%d\n",n);
       }
       else

       {

           qsort(position,n,sizeof(position[0]),cmp);
           for(i=0;i<n;i++)
           distance[i] = position[i] - position[i+1]-1;
           qsort(distance,n,sizeof(distance[0]),cmp);
           sum = position[0] -position[n-1]+1;
           i = 1;
           while(i<m)
           {
                sum -= distance[i-1];
                i++;


           }
         printf("%d\n",sum);

       }

}



  return 0;

}


/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 0ms
Take Memory: 108KB
Submit time: 2017-01-11 21:36:34
****************************************************/
           

继续阅读