首页 > 其他 > 详细

usaco Barn Repair

时间:2015-08-27 12:53:33      阅读:180      评论:0      收藏:0      [点我收藏+]

农夫需要将一串大小相等的畜棚盖起来,但是他只能定做M个木板,并不是所有的畜棚都有牛,所以不需要将所有的畜棚都盖起来。问在将所有有牛畜棚都盖起来且只能定做M个木板的情况下,使用的M个木板最少能盖多少个畜棚。

贪心的找出M-1个最大(相连且没有牛的畜棚区间),这些区间总和就是不许要盖住的总和,然后用编号最小的被占畜棚和编号最大的被占畜棚之间的所有畜棚总数减去刚刚得到的不许要盖住的总和就是正解。

/*
ID: modengd1
PROG: barn1
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <queue>
using namespace std;

int main()
{
    freopen("barn1.in","r",stdin);
    freopen("barn1.out","w",stdout);
    int M,S,C,sum,no_occupied;
    int input[201];
    priority_queue<int> Q;
    scanf("%d%d%d",&M,&S,&C);
    for(int i=0;i<C;i++)
    {
        scanf("%d",&input[i]);
    }
    sort(input,input+C);
    sum=input[C-1]-input[0]+1;
    for(int i=1;i<C;i++)
    {
        if(input[i]-input[i-1]>1)
            Q.push(input[i]-input[i-1]-1);
    }
    no_occupied=0;
    M=min(M,C);//有可能出现木板数量大于被占畜棚的情况
    for(int i=0;i<M-1;i++)
    {
        no_occupied+=Q.top();
        Q.pop();
    }

    cout<<sum-no_occupied<<endl;
    return 0;
}

  

usaco Barn Repair

原文:http://www.cnblogs.com/modengdubai/p/4762709.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!