【算法】贪心扫描线(+堆)

【题意】给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数。

【题解】

参考:[bzoj1707]: [Usaco2007 Nov]tanning分配防晒霜 by czllgzmzl

本题同样是区间和点的贪心,可以参考另一道题【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)

区间和点的贪心有两种经典做法,本题一样。

一、从区间角度出发,按区间右端点排序

区间第二关键字按左端点从小到大排序,防晒霜排序后,对于每个区间选择其最左的防晒霜。

这个过程可以用二分+并查集实现,参考上帝造题2。

二、从点的角度出发,按区间左端点排序

对于每个防晒霜,对左影响一致(左边的能用都用了)的情况下,给右端点最小的。

用堆实现。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cctype>
using namespace std;
const int maxn=2510;
priority_queue<int,vector<int>,greater<int> >q;
int n,m;
struct interval{int x,y;}b[maxn];
struct point{int x,c;}a[maxn];
bool cmp(interval a,interval b){return a.x<b.x;}
bool cmp2(point a,point b){return a.x<b.x;}int read()
{char c;int s=0,t=1;while(!isdigit(c=getchar()))if(c=='-')t=-1;do{s=s*10+c-'0';}while(isdigit(c=getchar()));return s*t;
}
int main(){m=read();n=read();for(int i=1;i<=m;i++)b[i].x=read(),b[i].y=read();for(int i=1;i<=n;i++)a[i].x=read(),a[i].c=read();sort(b+1,b+m+1,cmp);sort(a+1,a+n+1,cmp2);int now=0,ans=0;for(int i=1;i<=n;i++){while(now<m&&b[now+1].x<=a[i].x)now++,q.push(b[now].y);for(int j=1;j<=a[i].c;j++){while(!q.empty()&&q.top()<a[i].x)q.pop();if(q.empty())break;ans++;q.pop();}}printf("%d",ans);return 0;
}        

View Code

转载于:https://www.cnblogs.com/onioncyc/p/7577389.html

【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜相关推荐

  1. BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 810  Solved: 387 [S ...

  2. bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  3. 1707: [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 548  Solved: 262 [S ...

  4. BZOJ——T 1707: [Usaco2007 Nov]tanning分配防晒霜

    http://www.lydsy.com/JudgeOnline/problem.php?id=1707 Time Limit: 5 Sec  Memory Limit: 64 MB Submit:  ...

  5. 1707. [Usaco2007 Nov]tanning分配防晒霜

    传送门 一眼贪心,先把每头牛的忍受范围变成区间 对于每个防晒霜,肯定优先给,能给的,区间右端点最小的 因为右端点大的之后还有更多机会,然后搞一个 $set$ 什么的乱维护一下就行 改了半天原来是要开 ...

  6. bzoj1707[Usaco2007 Nov]tanning分配防晒霜*

    bzoj1707[Usaco2007 Nov]tanning分配防晒霜 题意: n头牛,第i头适应spf值在ai到bi之间的防晒霜.m种防晒霜,每种spf值为ci,有di瓶,问最多多少奶牛能得到合适的 ...

  7. BZOJ1707:[Usaco2007 Nov]tanning分配防晒霜

    我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  8. [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1<=C<=2500)C(1 头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  9. BZOJ1707 : [Usaco2007 Nov]tanning分配防晒霜

    S向每头奶牛连边,容量1 每个防晒霜向T连边,容量cover 每头奶牛向SPF在自己范围内的防晒霜连边,容量inf 用线段树优化建图跑最大流即可. #include<cstdio> con ...

最新文章

  1. python -- 进程
  2. 【前端词典】进阶必备的网络基础(下)
  3. HDB3的matlab编译码
  4. 五款好评如潮的手机APP分享 用起来绝对好用!
  5. 【CyberSecurityLearning 2】IP地址与DOS命令
  6. 中国古代天文星象学的入门书:《步天歌》
  7. mongoDB3.0.2 升级操作
  8. 习题3-11 Kickdown UVA - 1588
  9. npm升级依赖包_Taro跨端开发之依赖管理
  10. CMake入门(二)
  11. 作者:郑勇,山东省农业信息中心副主任、高级工程师。
  12. 计算机能帮助我学英语翻译,英语翻译以下几个句子,帮忙把汉语翻译成英语,请不要用软件翻!1、计算机能帮助人们从事复杂的计算.几十年前可能需要数月完成...
  13. jquery ajax示例_jQuery AJAX JSP Servlet Java示例
  14. gx works2 版本号_GX Works2下载 GX Works2(PLC编程软件) v1.89C 中文安装版(附序列号+安装教程) 下载-脚本之家...
  15. Windows Qt安装教程
  16. 零基础SQL教程: 什么是SQL 01
  17. 关于ADS注册表删除和重新安装
  18. 2021-5-17:Spring Boot整合Redis
  19. Java——聊聊JUC中的线程中断机制 LockSupport
  20. WPF 自定义分页控件TextBox分页页数只输入数字验证

热门文章

  1. 基于JAVA建材公司管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  2. 迎战618大促 京东技术大“阅兵”
  3. EV全球充电协议测试方案
  4. item2 报错 a session ended very soon after starting. check that the command in profile default
  5. 华为路由器a1虚拟服务器设置方法,华为路由器虚拟服务器设置方法
  6. 【project 】软件使用
  7. T46 Keithley 2612如何输出高电压?
  8. 常用传感器讲解十七--簧片开关传感器(KY-036)
  9. Linux入门基础(了解Linux+简单命令)
  10. 声源定位c语言源代码,stm32声源定位.doc