usaco Barn Repair (贪心)

来源:互联网 发布:淘宝客直通车 编辑:程序博客网 时间:2024/04/30 06:55

先假设有一块板子覆盖所有的stall,然后每次从这块板子中移除掉长度最大的不包含需要覆盖的stall的板子,每次移除能使板子数加一,所以总共移除m-1次即可。


/*PROG: barn1LANG: C++*/#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#define rep(i,a,b) for(i=a;i<=b;i++)using namespace std;int a[205];bool cmp(int a,int b){    return a>b;}int number[205];int main(){    freopen("barn1.in","r",stdin);    freopen("barn1.out","w",stdout);    int m,s,c,i,ct=0;    scanf("%d%d%d",&m,&s,&c);    rep(i,1,c) scanf("%d",&number[i]);    sort(number+1,number+c+1);    rep(i,2,c)    {        if(number[i]-number[i-1]>1)        {            a[ct++]=number[i]-number[i-1]-1;        }    }    sort(a,a+ct,cmp);    int b=1;    s-=number[1]-1+s-number[c];    if(m!=1) for(i=0;i<ct;i++)    {        s-=a[i];        //printf("%d\n",a[i]);        b++;        if(b==m) break;    }    printf("%d\n",s);    return 0;}


0 0