http://ace.delos.com/usacoprob2?a=aGfy6bAUEQK&S=barn1
额。。。比较水的题,估计没有比我的更短的程序了。。。。
先用一块木板把全部牛棚盖上,再删去(n-1)个空位,剩下的就是结果了。
删去(n-1)个空位,剩下n块牛棚,刚好符合要求,而删去的空位要最大就行了
#include <iostream> #include <cstdio> #include <string.h> #include <algorithm> using namespace std; bool compare(int a,int b) { return a>b; } int main() { freopen("barn1.in","r",stdin); freopen("barn1.out","w",stdout); int n,len,ncow; cin>>n>>len>>ncow; int a[205]={0}; for (int i=1;i<=ncow;i++) scanf("%d",&a[i]); sort(a+1,a+ncow+1); int sum=a[ncow]-a[1]+1; int b[205]={0}; for (int i=1;i<=ncow-1;i++) //计算距离差 b[i]=a[i+1]-a[i]-1; sort(b+1,b+ncow,compare); //距离差排序 for (int i=1;i<n;i++) //逐个删去(n-1)个空位 sum-=b[i]; cout<<sum<<endl; return 0; }