USACO 1.3.2

题目链接: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
",c);
    else
    {
        for(int i = 0; i<m-1; i++)
        {
            sum -= in[i];
        }
        printf("%d
",sum);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/littlepear/p/5678128.html