用m个板子将所有牛棚都包起来,可以先考虑一个木板将牛包起,需要最大的减最小的再加1;用两个木板是在用一个木板的情况下减去相邻牛棚之间的最大间距,以此类推m个木板就是一个木板的情况减去(m-1)个间距。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int m,c,s,ans;
int a[210];
int b[210];
int cmp(int x,int y)
{
return x>y;
}
int main()
{
scanf("%d%d%d",&m,&s,&c);
for(int i=1;i<=c;i++)
scanf("%d",&a[i]);
sort(a+1,a+c+1);
if(m>=c)
{
printf("%d\n",c);
return 0;
}
ans=a[c]-a[1]+1;
for(int i=2;i<=c;i++)
b[i-1]=a[i]-a[i-1];
sort(b+1,b+c,cmp);
for(int i=1;i<=m-1;i++)
ans=ans-b[i]+1;
cout<<ans;
return 0;
}