将每个牛棚的间隔求出来,进行排序,选择前cnt - m + 1个间隔,在所求的结果上在加m,采用贪心策略。
代码:
#include<iostream>#include<fstream>#include<algorithm>usingnamespacestd;
constint N = 205;
int m , s , c , num[N],num2[N];
int cnt = 0 , ans = 0;
int flag = 0;
int main(){
ofstream cout("barn1.out");
ifstream cin("barn1.in");
cin >> m >> s >> c;
for(int i = 0;i < c;i++){
cin >> num[i];
}
sort(num , num + c);
if(m >= c){
ans = c;
cout << ans << endl;
return0;
}
for(int i = 0;i < c;i++){
if(i >= 1){
num2[cnt++] = num[i] - num[i - 1];
}
}
sort(num2 , num2 + cnt);
for(int i = 0;i < cnt - m + 1;i++){
ans += num2[i];
}
ans += m;
cout << ans << endl;
return0;
}