题目大意

给出一些区间和一些点,一个点如果在一个区间内,那么此两者可以匹配。问匹配数最大是多少。

题解

这样的题我们一般都是站在区间上去找与其配对的点。我们可以得到如下性质:

对于一段区间\([l_1,r_1]\)的任意两点\(a,b, a<b\),它们对于任意一个区间\([l_2,r_2],l_2<l_1\),\(a\in[l_2,r_2]\)的可能性(以后用P表示)\(P(a\in[l_2,r_2])>P(b\in[l_2,r_2])\)。

什么叫“可能性大”呢?暂且规定如果事件A不可能发生的自变量的取值范围比事件B的小,则事件A成立的可能性比B的大。本题中,如果我们让\(a\)位于左区间,那么\(a\notin [l_2,r_2]\Rightarrow a\in(-\infty ,l_2)\cup(r_2,b)\)。而如果我们让\(b\)位于左区间,那么\(b\notin [l_2,r_2]\Rightarrow b\in(-\infty,l_2)\cup(r_2,\infty)\)后者范围比前者大,故性质成立。其它的结论通过类似的方式推导,无法消掉一个无穷,故此方法是对的。

因此,我们可以得到推论:

处理区间集合\(R\)和点集\(A\)时,先将左端点最靠右的区间\(r\)与属于该区间且最靠右的点\(a\)配对,然后子问题\(R-\{r\},A-\{a\}\)所能配对的数量是最多的。

凭什么就要选左端点最靠右的区间?因为先选了它并不会使结果变差。

由此我们就得到了贪心算法:给点按位置从大到小排序,区间按左端点位置从大到小排序,然后按以上黑体字做即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAX_POINT = 3000, MAX_RANGE = 3000; struct Point
{
int Num, P;
}_points[MAX_POINT]; struct Range
{
int L, R;
}_ranges[MAX_RANGE]; bool CmpPoint(Point& a, Point& b)
{
return a.P > b.P;
} bool CmpRange(Range& a, Range& b)
{
return a.L > b.L;
} int main()
{
int totRange, totPoint;
scanf("%d%d", &totRange, &totPoint);
for (int i = 1; i <= totRange; i++)
scanf("%d%d", &_ranges[i].L, &_ranges[i].R);
for (int i = 1; i <= totPoint; i++)
scanf("%d%d", &_points[i].P, &_points[i].Num);
sort(_ranges + 1, _ranges + totRange + 1, CmpRange);
sort(_points + 1, _points + totPoint + 1, CmpPoint);
int ans = 0;
for (int i = 1; i <= totRange; i++)
{
for (int j = 1; j <= totPoint; j++)
{
if (_points[j].Num > 0 && _ranges[i].L <= _points[j].P && _points[j].P <= _ranges[i].R)
{
ans++;
_points[j].Num--;
break;
}
}
}
printf("%d\n", ans);
return 0;
}

POJ3614 Sunscreen 贪心入门的更多相关文章

  1. [POJ3614]Sunscreen (贪心)

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

  2. POJ--3614 Sunscreen(贪心)

    题目 3614 Sunscreen 2500*2500直接排序暴力贪心 #include<iostream> #include<cstring> #include<alg ...

  3. poj3614 Sunscreen(贪心+STL)

    https://vjudge.net/problem/POJ-3614 如果这不是优先队列专题里的,我可能不一定能想到这么做. 结构体命名得有点不好,解题中看着Edge这个不恰当的命名,思路老是断掉. ...

  4. POJ3614 Sunscreen 优先队列+贪心

    Description To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her ...

  5. poj3614 Sunscreen【贪心】

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11772   Accepted: 4143 Descri ...

  6. 【POJ3614 Sunscreen】【贪心】

    题面: 有c头牛,需要的亮度在[min_ci,max_ci]中,有n种药,每种m瓶,可以使亮度变为v 问最多能满足多少头牛 算法 我们自然考虑贪心,我们首先对每头牛的min进行排序,然后对于每种药,将 ...

  7. POJ 3614 Sunscreen 贪心

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

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

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

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

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

随机推荐

  1. hdu 4297

    有两个基础需要掌握: RMQ,以及LCA. RMQ:dp[i][j]表示下标从i开始,长度为2^j的一段元素中的最值.则易得状态转移如下:dp[i][j]=max/min(dp[i][j-1],dp[ ...

  2. php统计网站 / html页面 浏览访问次数程序

    本文章来给大这介绍了php自己写的一些常用的网站统计代码写法,用无数据库的与使用数据库及html静态页面浏览资次数统计代码,大家可进入参考. 实例1 直接使用txt文件进行统计的代码 <?php ...

  3. Ubuntu下搭建repo服务器(一): 配置gitosis

    1. 说明 服务器端IP: 192.168.1.126,下文简称:A端: 客户端IP: 192.168.130.19,下文简称:B端: Android工程代号:17435. 2. 安装必要软件(A端) ...

  4. MySQL实现递归查询

    DROP FUNCTION IF EXISTS queryChildrenCaseInfo;CREATE FUNCTION queryChildrenCaseInfo(cId INT)RETURNS ...

  5. 初学Hibernate杂乱总结

    1.如果在"one"方中(如部门)写有Set属性,但是没有在映射文件中配置,那么,在获取指定部门下的所有员工时,不会报错,但是,Set内的元素个数为0.输出为"[]&qu ...

  6. create-react-app 引入ant design 及 使用 less

    全局引入: 第一步:全局安装 create-react-app npm install create-react-app -g 第二步:安装 yarn npm install -g yarn 第三步: ...

  7. matplotlib之pyplot 学习示例

    现在通过numpy和matplotlib.pyplot 在Python上实现科学计算和绘图,而且和matlab极为相像(效率差点,关键是方便简单) 这里有大量plots代码例子.  1. 简单的绘图( ...

  8. html5 web worker学习笔记(记一)

    (吐槽:浏览器js终于进入多线程时代!) 以前利用setTimeout.setInterval等方式的多线程,是伪多线程,本质上是一种在单线程中进行队列执行的方式.自从html5 web worker ...

  9. ASP.net获取当前url各种属性(文件名、参数、域名等)的方法

    假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.te ...

  10. 时序分析:KMP算法用于序列识别

    考研基础资料之一的<算法与数据结构>,KMP算法作为串匹配的基本算法,为必考题目之一.对于算法入门来说,也是复杂度稍高的一个基本算法. KMP算法作为串匹配的非暴力算法,是为了减少回溯而设 ...