我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html

题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1707

显然,如果一头奶牛能找到自己可以用的防晒霜就直接用,它用这一瓶防晒霜比它不用防晒霜留给别的牛用会更优,因为防晒霜与奶牛是一一对应的关系。那么问题就转化成了,如果一头奶牛有多瓶防晒霜可以用,用哪一瓶更好?

假设有两瓶防晒霜的\(spf\)值分别为\(x\)和\(y\),且\(x<y\)。由于奶牛在无序的情况下我们并不能明显的区分出\(x\)与\(y\)孰轻孰重,所以我们先将奶牛按照\(maxspf\)为第一关键字,\(minspf\)为第二关键字从小到大排序。对于第\(i\)头奶牛都可以接受的\(x\)和\(y\),对于\(i\)后面的奶牛只有这三种情况:

\(1\)、\(x\)和\(y\)都可用

\(2\)、\(x\)和\(y\)都不可用

\(3\)、\(x\)不可用,\(y\)可用

因为第\(3\)种情况,第\(i\)头奶牛使用\(spf\)值为\(x\)的防晒霜显然更优。所以每一头牛只需要找到在自己能接受范围内并且\(spf\)值最小的那一瓶防晒霜就可以了。

时间复杂度:\(O(nm)\)

空间复杂度:\(O(n)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std;const int maxn=2505;int n,m,ans;int read() {int x=0,f=1;char ch=getchar();for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';return x*f;
}struct Cows {int min_spf,max_spf;bool operator<(const Cows &a)const {if(max_spf==a.max_spf)return min_spf<a.min_spf;return max_spf<a.max_spf;}
}c[maxn];struct SPF {int v,sum;bool operator<(const SPF &a)const {return v<a.v;}
}s[maxn];bool find(int l,int r) {for(int i=1;i<=m;i++)if(s[i].v>=l&&s[i].v<=r&&s[i].sum) {//防晒霜spf值在l到r内并且还有s[i].sum--;return 1;}return 0;
}int main() {n=read(),m=read();for(int i=1;i<=n;i++) {c[i].min_spf=read();c[i].max_spf=read();}sort(c+1,c+n+1);//牛排序for(int i=1;i<=m;i++) {s[i].v=read();s[i].sum=read();}sort(s+1,s+m+1);//防晒霜排序for(int i=1;i<=n;i++)if(find(c[i].min_spf,c[i].max_spf))ans++;//如果有可以用的防晒霜就用printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/AKMer/p/9776705.html

BZOJ1707:[Usaco2007 Nov]tanning分配防晒霜相关推荐

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

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

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

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

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

    n头牛,第i头要SPF(某个参数)在Lowi到Highi的药,药m种每种SPF为Vi,数量为Numi,求最多能满足几头牛. 方法一:什么都看不出来,只知道第i头牛能和一些药匹配,于是网络流,牛向药连容 ...

  4. 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜

    [算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 深度学习中的注意力机制(二)
  2. 在C#用GDI+实现图形图像的任意变形效果(转载)
  3. 任务间资源共享问题示例
  4. 【JFreeChart】JFreeChart—输出组合图表
  5. java Arrays Generic
  6. 浅谈html的语义化和一些简单优化,html标签语义化
  7. Ubuntu 16.04 安装 cuda 7.5.run BEGIN failed--compilation aborted at ./cuda-installer.pl line 5
  8. 【算法精讲】分享一道很不错的算法题
  9. UI设计素材模板|首页解析
  10. Jenkins 配置mirrors
  11. paip.hadoop的应用研究总结
  12. 凸包问题(包含蛮力算法和快速凸包算法)+最优二叉查找树详解
  13. 系统集成项目管理工程师题型分析及章节占分比
  14. 计算机科学与导论知识点总结,计算机科学导论复习资料整理.doc
  15. Java实现文件传输
  16. 阿里云RDS Serverless测评
  17. 终于知道为啥网页不让我复制粘贴了!
  18. vue3+ts+vite 路径别名配置
  19. 公路多孔箱涵设计_箱涵结构设计.pdf
  20. 【算法】妙不可言---算法复杂性

热门文章

  1. [Android 性能优化系列]内存之终极篇--降低你的内存消耗
  2. 年轻人才是短视频直播的营销未来
  3. 水生生物学类毕业论文文献包含哪些?
  4. 人大计算机跨考,2018考研心得:计算机专业跨考人大经济学全攻略.doc
  5. 软件测试知识点(持续更新)
  6. 小白也能动手搭建属于自己的博客网站
  7. 全国第四轮计算机学科评估排名,最权威中国高校学科排名,全国第四轮学科评估结果出炉!...
  8. CS231n 之 BACK PROPAGATION
  9. 关于QQ一些功能的实现(二)
  10. GN及Ninja基本语法