用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 }