2017-5-27

题目描述

给定板的数目,用这么多块板把牛棚盖上使得板的总长最小

解答

先把牛所在牛棚号排序,然后按照每两个牛棚之间的距离排序,
间隔过大的牛棚不搭木板即可

代码

/*
ID: 18795871
PROG: barn1
LANG: C++
*/
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<algorithm>
using namespace std;const int N = 200;
int x[N+1];ifstream fin("barn1.in");
ofstream fout("barn1.out");struct cj{int s,e,c;
}y[N+1];int cmp(const void *a,const void *b){struct cj *k1=(struct cj *)a;struct cj *k2=(struct cj *)b;if (k1->c==k2->c) return k2->s-k1->s;return k2->c-k1->c;
}int main()
{int i,m,n,c;fin>>m>>n>>c;int ma=1,mi=200;for (i=1;i<=c;i++){fin>>x[i];ma=max(ma,x[i]);mi=min(mi,x[i]);} sort(x+1,x+c+1);for (i=1;i<c;i++){y[i].s=x[i];y[i].e=x[i+1];y[i].c=x[i+1]-x[i];}qsort(y+1,c-1,sizeof(y[0]),cmp);int sum=0;int l=min(m,c);//注意不一定要前m个大的(若m>c)for (i=1;i<l;i++){sum+=y[i].c-1;}int r=ma-mi+1-sum;fout<<r<<endl;return 0;
}

直接使用贪心算法,如果说我们没有限制木棒的根数,那么我们应该把每一个棚子都加一根木棒,这样会使使用的木棒的总长度最小,但是,我们的根数是有限制的,这就意味着我们的木棒可能会覆盖到没有奶牛的棚子上面去,那么我们应该将所有的M根木棒全部用上,才会使总长度最小,那么就等同于我们要用M根木棒覆盖所有的奶牛,那么就相当于在S长的线段上放置M个区间,保证区间长度和最小,并且能够覆盖到所有指定的地方。
那么我们剩下来的呢,剩下的M-1个区间之和应该是越大越好,(头和尾巴一定是有奶牛的),那么我们就可以使用贪心了,区间总长度-剩下M-1区间之和就是我们要求的结果。我们将区间长度进行排序,选取最大的M-1个区间不要放置木棍即可。

/*
ID: 18795871
PROG: barn1
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;ifstream fin("barn1.in");
ofstream fout("barn1.out");const int N = 200;
int x[N+1],y[N+1];int main()
{int i,m,n,c,ma=0,mi=N;while (fin>>m>>n>>c){for (i=0;i<c;i++){fin>>x[i];ma=max(ma,x[i]);mi=min(mi,x[i]); } if (m>=c){fout<<c<<endl;continue;}sort(x,x+c);for (i=0;i<c-1;i++){y[i]=x[i+1]-x[i]-1;}sort(y,y+c-1);int sum=0;for (i=0;i<m-1;i++){sum+=y[c-i-2];}fout<<ma-mi+1-sum<<endl; }return 0;
}

USACO-Section1.4 Barn Repair (贪心算法)相关推荐

  1. USACO section1.3 Barn Repair 修理牛棚(贪心)

    题目:http://www.wzoi.org/usaco/11%5C304.asp 大意:有m个点,用有数量限制的区间把这些点全部覆盖,求区间和的最小值. 贪心原理:如果限制的区间数大于等于m的话an ...

  2. USACO修理牛棚 Barn Repair

    USACO修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶.门被吹飞了 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行 ...

  3. P1209 [USACO1.3]修理牛棚 Barn Repair(贪心+逆向思维)难度⭐⭐⭐

    我们可以先假设只有一块木板从编号最小的牛棚一直铺到编号最大的牛棚,然后断开m-1处.自然要按相邻牛棚的编号差从大到小断开才能使我们断开的地方可以有效节省木板长度(因为中间省去的要更多) 另外,要将输入 ...

  4. python贪心算法——以“修理牛棚”题目为例

    [USACO1.3]修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶.门被吹飞了 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个 ...

  5. 贪心算法 -- 最小延迟调度

    转自:https://blog.csdn.net/bqw18744018044/article/details/80285414 总结: 首先,证明贪心的时候交换论证是万能的!其次,这一点如果要满足, ...

  6. 【贪心算法】POJ-2376 区间问题

    一.题目 Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cle ...

  7. 挑战程序设计竞赛笔记-贪心算法

    2.2 贪心算法 贪心算法的精髓在于,遵循某种规则,不断地选取当前最优解. 硬币问题 假设有 1 元,5元,10元,50元,100元,500元的硬币C1,C5,C10,C50,C500枚,现在需要凑出 ...

  8. 【贪心算法】poj 2431: Expedition(最优加油方法)

    题目描述(传送门) Description A group of cows grabbed a truck and ventured on an expedition deep into the ju ...

  9. 4.贪心算法 含例题

    文章目录 贪心算法 一.一个基本的贪心算法问题:区间调度问题 二.区间调度的推广:多个资源下的贪心算法 三.最小延迟调度--交换论证 四.最优超高速缓存问题 五.图最短路径问题 六.最小生成树问题 七 ...

最新文章

  1. 如何在同一系统里同时启动多个Tomcat
  2. Reporting Service 在文本框中换行的问题
  3. 【零基础】计算机网络技术
  4. Bootstrap学习(一)
  5. REST API之前端跨域访问
  6. 白板推导系列Pytorch-逻辑回归
  7. 二十五、JAVA多线程(六、线程控制操作)
  8. 不靠加速器 路由配置也可扭转网游战局
  9. G312高速公路S标段路线设计--金陵科技学院道路毕业设计
  10. php解决时间超过2038年
  11. office高级应用与python综合案例教程_《office高级应用案例教程.ppt
  12. 【EMNLP2020】忒修斯之船启发下的知识蒸馏新思路 - 微软研究院
  13. 工程力学专业考研转计算机,“初见不知提桶意,再见已是提桶人”,土木跨考计算机可行吗?...
  14. Unity 之 Ping类简析尝试使用
  15. 柚墨模板PPT干货分享:幻影动画,打造科幻大片前卫PPT
  16. Transformer15
  17. 计算机网络相关知识总结
  18. html注册新浪邮箱代码,JS仿新浪邮箱点击联系人添加Email地址
  19. 剑网三重置版服务器维护,《剑网三》重制版基础教程,让你从入门萌新步入大佬行列...
  20. 【电源专题】为什么开关电源中使用脉冲频率调制(PFM)轻载效率会更高?

热门文章

  1. SQL | 目录(持续更新)
  2. 机器学习 | 模型选择
  3. M1 macbook值得购买吗?关于M1芯片macbook的三点购买建议
  4. 信奥中的数学:斯特林数、卡特兰数
  5. 利用python制作的可视化批量文件后缀处理工具
  6. PHP请求一次网页前端浏览一次后端会出现两次请求次数的原因和解决方法。
  7. Java工作笔记-注解的进一步理解
  8. C++ STL list构造
  9. Android studio如何更改应用程序的图标以及名称
  10. Qt5.7+Opencv2.4.9人脸识别(六)Tcp,Mysql,3DES,XML综合