给出:可能买到的木板最大的数目M(1<= M<=50);牛棚的总数S(1<= S<=200); 牛棚里牛的总数C(1 <= C <=S);和牛所在的牛棚的编号stall_number(1 <= stall_number <= S),计算拦住所有有牛的牛棚所需木板的最小总长度。 输出所需木板的最小总长度作为答案。
思路:算出来两两相邻之间的距离,并计算出第一个牛棚到最后一个牛棚的距离和,因为可以用m个木板,所以只允许中间空(m-1)个空隙,所以,求出最大的空隙,减去即可;
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4
5 int m,s,c,h;
6 int num[1010];
7 int t[1010];
8 int ans,k,n;
9 bool cmp(int a,int b)
10 {
11 return a>b;
12 }
13 int main()
14 {
15 cin>>m>>s>>c;
16 for(int i=1;i<=c;++i)
17 cin>>num[++h];
18 sort(num+1,num+h+1);
19 ans=num[h]-num[1]+1;
20 for(int i=1;i<h;++i)
21 {
22 t[i]=num[i+1]-num[i]-1;
23 }
24 sort(t+1,t+h+1,cmp);
25 for(int i=1;i<m;++i)
26 {
27 ans-=t[i];
28 }
29 cout<<ans;
30 return 0;
31 }