区间覆盖最小长度

# 题意

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

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

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

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

# 题解
线段的长度最小为1

 即最大的几个区间不取空隙,取长度为1的区间

 1 #include <bits/stdc++.h>
 2 #define pii pair<int,int>
 3 #define fi first
 4 #define se second
 5 using namespace std;
 6 const int N=210;
 7 int a[N],b[N];
 8 int main(){
 9     int n,m;
10     while(scanf("%d",&n)!=EOF) {
11         scanf("%d",&m);
12         for(int i=0;i<n;i++)
13             scanf("%d",&a[i]);
14         sort(a,a+n);
15         int ans=a[n-1]-a[0]+1;
16         for(int i=0;i<n-1;i++)
17             b[i]=a[i+1]-1-a[i];
18         sort(b,b+n-1);
19         int res=0;
20         m-=1;
21         for(int i=n-2;m;i--,m--)
22             res+=b[i];
23         printf("%d\n",ans-res);
24     }
25 }

 

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12543779.html
今日推荐