USACO 1.3.2
这道题有点小坑,不是算法错了,而是文件名,是barn1不是barnl,恕我眼拙,找了十五分钟...
肯定是木板的个数用的越多越好,这样可以减少空隙.
简单的贪心,将每两个马厩之间的空隙从大到小排序,取前m个. 注意c<=m的情况.
/* ID: wang9621 PROG: barn1 LANG: C++ */ #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int in[300]; int cnt[300]; bool cmp(int a,int b) { return a>b; } int main() { freopen("barn1.in","r",stdin); freopen("barn1.out","w",stdout); int m,s,c; scanf("%d %d %d",&m,&s,&c); for(int i = 1; i<=c; i++) { scanf("%d",&cnt[i]); } int ans = 0; sort(cnt+1,cnt+c+1); for(int i = 2; i<=c; i++) { in[ans++] = cnt[i]-cnt[i-1]-1; } int sum = cnt[c]-cnt[1]+1; sort(in,in+ans,cmp); if(c<=m) printf("%d\n",c); else { for(int i = 0; i<m-1; i++) { sum -= in[i]; } printf("%d\n",sum); } return 0; }