zoukankan      html  css  js  c++  java
  • luogu1209 修理牛棚 贪心

    看到木板最大数目,容易下意识想到二分。但是我们冷静思考下,这道题怎么样才能使总长度最短。

    因为有些牛不在,所以有些牛棚是不需要覆盖木板的。如果能每个牛棚分单独一个木板,一定总长度是最小的。但是由于木板数量有限制,所以我们有时只能用一个比较长的木板的时候,顺便把没有牛的牛棚也覆盖了。就造成了浪费。所以一定是使用最大数目木板的。

    我们考虑,如果第一头牛在a[1],最后一头牛在a[c]。我们先考虑,把这个这一段放置一整个木板,显然这是最不优秀的方法。因为我们只用了一个木板。我们考虑这一段内,有些两头牛之间的一段牛棚都没有牛,那么我们把原先的一整个木板拆成两个,就可以使得这一个没有牛的区间不放木板,从而节省了长度。所以就相当于,每多一块木板,就能使得区间内一段没有牛的部分,可以不覆盖木板。我们就对所有没有牛的区间排一个序,然后优先去删掉较大的,删m-1个即可。

    注意题目中输入的a数组可能无序,需要排序后使用

     1 #include <cstdio>
     2 #include <algorithm> 
     3 using namespace std;
     4 int m,s,c,ans;
     5 int a[210],b[210];
     6 int main()
     7 {
     8     scanf("%d%d%d",&m,&s,&c);
     9     for (int i = 1;i <= c;i++)
    10         scanf("%d",&a[i]);
    11     sort(a + 1,a + c + 1);
    12     ans = a[c] - a[1] + 1;
    13     for (int i = 1;i <= c - 1;i++)
    14         b[i] = a[i + 1] - a[i] - 1;
    15     sort(b + 1,b + c);
    16     for (int i = c - 1;i >= c - m + 1;i--)
    17         ans -= b[i];
    18     printf("%d
    ",ans);
    19 }
    心之所动 且就随缘去吧
  • 相关阅读:
    如何解压.bz2文件包
    Typecho中的gravatar头像无法加载
    整理的mysql优化内容
    PHP常用的一些正则表达式
    git log --stat常用命令
    Linux查找含有某字符串的所有文件
    linux下如何查看chm文件
    linux访问windows共享文件夹的方法
    typecho除了首页其他大部分网页404怎么办?
    Windows在当前目录打开cmd
  • 原文地址:https://www.cnblogs.com/iat14/p/11144166.html
Copyright © 2011-2022 走看看