To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her hide with sunscreen when they're at the beach. Cow i has a minimum and maximum SPF rating (1 ≤ minSPFi ≤ 1,000; minSPFimaxSPFi ≤ 1,000) that will work. If the SPF rating is too low, the cow suffers sunburn; if the SPF rating is too high, the cow doesn't tan at all........

The cows have a picnic basket with L (1 ≤ L ≤ 2500) bottles of sunscreen lotion, each bottle i with an SPF rating SPFi (1 ≤ SPFi ≤ 1,000). Lotion bottle i can cover coveri cows with lotion. A cow may lotion from only one bottle.

What is the maximum number of cows that can protect themselves while tanning given the available lotions?

Input

* Line 1: Two space-separated integers: C and L
* Lines 2..C+1: Line i describes cow i's lotion requires with two integers: minSPFi and maxSPFi
* Lines C+2..C+L+1: Line i+C+1 describes a sunscreen lotion bottle i with space-separated integers: SPFi and coveri

Output

A single line with an integer that is the maximum number of cows that can be protected while tanning

Sample Input

3 2
3 10
2 5
1 5
6 2
4 1

Sample Output

2

题意:有C头牛,每个牛都有对阳光的承受空间【minspf,maxspf】,有L种防晒霜,每种都有SPF值和瓶数,涂到牛身上可使其只收到SPF值的阳光,每瓶只可涂一头牛,问最多几只牛可以享受阳光?

思路:
此题可以看成在一个数轴上操作。

图中矩形块就代表了牛的承受区间,我们从左到右对牛进行涂防晒霜处理,可以从图中看到,

①【0,1】位置,无牛需要防晒霜

②【1,4】位置,只有一头牛有需求,那我们直接给橙色涂

④【4,5】位置,红色牛和橙色牛都有需求,给哪只牛涂呢?

有人可能说了,前面都给橙色牛涂了,现在肯定给红色啦,对,但是如果在【4,5】之前没有防晒霜呢(就一瓶防晒霜在【4,5】位置),也就是说这瓶防晒霜面临两个选择,

我们从图中看出,那肯定也是给红色牛啦,因为红色牛快承受不住啦(该牛承受区间右边界小),也就是说再往下进行的话,马上就出了红牛的承受区间了,然而橙牛却还没有,

所以我们先给红牛,之后再瞅瞅有没有适合橙牛的。

这样就可以看出我们的策略:

①将牛按右边界从小到大排序,防晒霜按spf从小到大排序

②将牛按左边界从大到小排序,防晒霜按spf从大到小排序

回头看这问题,对于排好序的牛(假设按①方式),有两瓶防晒霜x>y,那么是选x的,因为x,y对于后面的牛来说有三种情况,

①x、y可选

②x不可选,y可选

③x、y不可选(由左边界影响)

那么我们选择小的就对后面的牛来说影响最小

并且因为选择了对后面牛最小的影响方式,该牛可以选择防晒霜,就没有必要留给下头牛,因为只算牛头数,哪头牛不是牛呢

 #include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std; int C,L; struct Node
{
int l;
int r;
} cow[],sun[]; bool cmp1(Node a,Node b)
{
return a.l < b.l;
}
bool cmp2(Node a,Node b)
{
return a.r < b.r;
} int main()
{
scanf("%d%d",&C,&L);
for(int i=; i<=C; i++)
{
scanf("%d%d",&cow[i].l,&cow[i].r);
}
for(int i=; i<=L; i++)
{
scanf("%d%d",&sun[i].l,&sun[i].r);
}
sort(cow+,cow++C,cmp2);
sort(sun+,sun++L,cmp1);
int ans = ;
for(int i=; i<=C; i++)
{
for(int j=; j<=L; j++)
{
if(cow[i].l <= sun[j].l && cow[i].r >= sun[j].l && sun[j].r)
{
ans++;
sun[j].r--;
break;
}
}
}
printf("%d\n",ans);
}

优先队列写法:

 #include<bits/stdc++.h>
using namespace std; int C,L;
struct Node
{
int l;
int r;
bool operator<(Node b)
{
return l < b.l;
}
} cow[],sun[];
priority_queue<int,vector<int>,greater<int> >que;
int main()
{
scanf("%d%d",&C,&L);
for(int i=; i<=C; i++)
scanf("%d%d",&cow[i].l,&cow[i].r);
for(int i=; i<=L; i++)
scanf("%d%d",&sun[i].l,&sun[i].r);
sort(cow+,cow++C);
sort(sun+,sun++L);
int j = ;
int ans = ;
for(int i=; i<=L; i++)
{
while(j<=C&&cow[j].l <= sun[i].l)
que.push(cow[j].r),j++;
while(!que.empty() && sun[i].r)
{
int tmp = que.top();
que.pop();
if(tmp >= sun[i].l)
ans++,sun[i].r--;
}
}
printf("%d\n",ans);
}

												

Sunscreen POJ - 3614(贪心)的更多相关文章

  1. Heap:Sunscreen(POJ 3614)

    晒太阳 题目大意:一堆牛,为了避免晒太阳会灼烧自己,然后他们自己有自己的防晒指数(一个区间),防晒霜可以提高防晒因数SPF,大了不行小了不行,现在有一桶防晒霜,他们提供一定的SPF,但是最多可以提供k ...

  2. POJ 3614 Sunscreen 贪心

    题目链接: http://poj.org/problem?id=3614 Sunscreen Time Limit: 1000MSMemory Limit: 65536K 问题描述 to avoid ...

  3. poj -3614 Sunscreen(贪心 + 优先队列)

    http://poj.org/problem?id=3614 有c头奶牛在沙滩上晒太阳,每头奶牛能忍受的阳光强度有一个最大值(max_spf) 和最小值(min_spf),奶牛有L种防晒霜,每种可以固 ...

  4. 【POJ 3614 Sunscreen】贪心 优先级队列

    题目链接:http://poj.org/problem?id=3614 题意:C头牛去晒太阳,每头牛有自己所限定的spf安全范围[min, max]:有L瓶防晒液,每瓶有自己的spf值和容量(能供几头 ...

  5. POJ 3614:Sunscreen 贪心+优先队列

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5378   Accepted: 1864 Descrip ...

  6. POJ 3614 Sunscreen(贪心,区间单点匹配)

    把牛的SPF看作一个区间,防晒霜看作点.一个点可以匹配C[i]次,问最大匹配数.可以用图论做. 也可以贪心.贪心的思想是,把区间和点排序以后,考虑最左边的点,加入和这个点相交的区间, 并排除出界的区间 ...

  7. POJ 3614 Sunscreen 优先队列 贪心

    题意 有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉. 而刚开始的阳光的强度非常大,奶牛都承受不住 ...

  8. poj 3614 Sunscreen

                                                                                                        ...

  9. 【POJ 3614】 Sunscreen

    [题目链接] http://poj.org/problem?id=3614 [算法] 将MinSPF从大到小排序,每头牛找SPF值最大的防晒霜 [代码] #include <algorithm& ...

随机推荐

  1. IOS 命令行工具开发

    例子  我们需要查看手机APP里面的某个应用的架构 新建一个Single View App 的ios项目 ToolCL 然后在 main函数中加入以下代码 // // main.m // ToolCL ...

  2. vue-cli3初尝试之路径别名配置

    let path = require('path') function resolve(dir) { return path.join(__dirname, dir) } module.exports ...

  3. flask中的wtforms使用

    一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...

  4. laravel 多对多关联 attach detach sync

    用户表和角色表,多对多关联,一个用户有多个角色,一个角色属于多个用户 添加多对多关联 attach: 给1号用户添加1号角色,并把关联表的column字段赋值为$value,后边的数组需要的时候再添加 ...

  5. WebStorm中常用的快捷键及使用技巧

    ------------------------------------- 近期整理了如下个人觉得比较常用的快捷键,也请前辈给予补充.多多指教. --------------------------- ...

  6. IDEA中tomcat的部署

    创建一个项目就要部署tomcat

  7. java Map按Key排序

    public static void main(String[] args) { Map<String, String> map = new TreeMap<String, Stri ...

  8. win10下右键菜单添加“打开cmd”

    早期版本的win10是可以在文件夹的左上角打开cmd的,更新后发现现在只有powershell能用了.这不方便. 通过修改注册表,可以实现这个功能. 具体做法:新建一个.reg文件win10_add_ ...

  9. Tomcat延迟启动

    import subprocess as t import time, os, requests, sys WEB_IP = '127.0.0.1:8080' # WEB_IP = '127.0.0. ...

  10. KnockOut -- 快速入门

    简单示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...