洛谷1209 修理牛棚

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

猜你喜欢

转载自blog.csdn.net/zailingzhe/article/details/88777358