我对贪心的理解: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;
}

BZOJ1707:[Usaco2007 Nov]tanning分配防晒霜的更多相关文章

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

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

  2. [BZOJ1707] [Usaco2007 Nov] tanning分配防晒霜 (贪心)

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

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

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

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

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

  5. 【bzoj1707】[Usaco2007 Nov]tanning分配防晒霜 贪心+Treap

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

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

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

  7. BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜(扫描线+贪心+优先队列)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1707 [题目大意] 每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值 防晒霜的作 ...

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

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

  9. bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜【贪心||最大流(?)】

    洛谷上能过的最大流bzoj上T了--但是贪心做法明明在洛谷上比最大流要慢啊--如果是最大流的话就是裸题了吧 说一下贪心,就按照防晒霜排序,然后对每一个防晒霜选一头可以使用的且r最小的牛 就,没了. 贪 ...

随机推荐

  1. HBase核心技术点

    表的rowkey设计核心思想: 依据rowkey查询最快 对rowkey进行范围查询range 前缀匹配 预分区创建的三种方式 create 'ns1:t1', 'f1', SPLITS => ...

  2. java服务安装(一):使用java service wrapper及maven打zip包

    目录(?)[+] 1概述 1_1为什么要用服务形式运行 1_2如何让java程序以服务形式运行 1_3打包需求 2程序示例 3maven打zip包 3_1maven-assembly-plugin介绍 ...

  3. iframe自动全屏

    <iframe src="weixin.php" id="adlistpage" name="adlistpage" framebor ...

  4. Python菜鸟之路:Python基础-模块

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,分组的规则就是把实现了某个 ...

  5. 洛谷2704 [NOI2001]炮兵阵地

    题目戳这里 Solution 状压DP很好的入门题,用熟练位运算貌似也没那么难. 首先分析一下题目: 看见n=100,m=10,立马就想到了状压,看起来也像DP,所以我们还是采用行号为阶段的状压DP. ...

  6. isinstance/issubclass/type的区别?

    type() 判断某个对象是否是该类创建的,只看一层,如果是继承类,也不会考虑继承类的类型.. Issubclass() 判断该类是否是另一个类的派生类,也就是子类,参数为类. isinstance( ...

  7. Linux显示网络相关信息

    netstat -tlun    查看本机监听的端口 netstat -an      查看本机所有的网络连接 netstat -rn      查看本机路由表 -t TCP协议 -u UDP协议 - ...

  8. Struts2-Value Stack浅析

    http://my.oschina.net/mlongbo/blog/88250 Value Stack的作用: 1.       可以作为一个数据中转站 2.       用于在前台-后台之间传递数 ...

  9. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

  10. 【leetcode刷题笔记】Subsets II

    Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...