zoukankan      html  css  js  c++  java
  • Sunscreen [POJ3614] [贪心]

    描述

    C (1 ≤ C ≤ 2500) 头奶牛在海滩边晒太阳,要避免在日光浴时产生难看的灼伤,每头奶牛必须用防晒霜覆盖它的皮肤。第 i 头奶牛有一个最小和最大 SPF 值 (1 ≤ minSPFi ≤ 1,000; minSPFimaxSPFi ≤ 1,000) 将会起作用。如果 SPF 值太低,则奶牛会受到日光灼伤;如果 SPF 值太高,则牛奶无法进行日光浴。

    奶牛们有一个野餐篮子,带了 L (1 ≤ L ≤ 2500) 瓶防晒霜乳液,第 i 瓶的 SPF 值是 SPFi (1 ≤ SPFi ≤ 1,000) 。第 i 瓶防晒霜可以涂抹覆盖 coveri 头奶牛。一头牛奶只能用一瓶防晒霜涂抹。

    对于给定的防晒霜乳液,最多可以有多少头奶牛能够在日光浴时避免被灼伤?

    输入

    * 第 1 行: 两个以空格分隔的整数: CL
    * 第 2 到 C+1 行: 第 i 行描述了第 i 头奶牛的防晒霜约束条件,包括两个整数: minSPFimaxSPFi
    * 第 C+2 到 C+L+1 行: 第 i+C+1 行描述了第 i 个防晒霜瓶,包括以空格分隔的整数: SPFicoveri

    输出

    只包含一个整数的单行,表示日光浴时受到防晒保护的奶牛的最大数量。

    示例输入
    3 2
    3 10
    2 5
    1 5
    6 2
    4 1
    示例输出
       2
    分析
    这个就是点能覆盖最多区间个数的问题
    我们按右端点排好序,然后从左边开始选有没有点能覆盖当前区间的点去覆盖
    为什么这样做?
    因为后面的区间有两种可能
    1.后面区间左端点在当前区间左端点前面,这个没有影响
    2.后面区间左端点在当前区间左端点后面,这时你就明白为什么要从左边开始选了。因为后面区间的左端点更靠后,有可能前边一个区间能选到的点,后面那个区间够不着,而当前又把靠后的点选了,万一后面的区间只有那个靠后的点可选,那它就无点可选了,此时显然当前区间选更考前的点会更优
    所以,题目讲完了
    代码
     1 #include<queue>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #define maxn 2505
     7 #define inf (1<<30)
     8 #define RG register int
     9 #define rep(i,a,b) for(RG i=a;i<=b;i++)
    10 using namespace std;
    11 int n,m,ans;
    12 int pos[1005];
    13 struct Dat{
    14     int l,r;
    15     bool operator < (const Dat &a)const{
    16         return r<a.r;
    17     }
    18 }dat[maxn];
    19 inline int read()
    20 {
    21     int x=0,f=1;char c=getchar();
    22     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    23     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    24     return x*f;
    25 }
    26 
    27 int main()
    28 {
    29     int a,b;
    30     n=read();m=read();
    31     rep(i,1,n)    dat[i].l=read(),dat[i].r=read();
    32     sort(dat+1,dat+1+n);
    33     rep(i,1,m)    a=read(),b=read(),pos[a]+=b;
    34     rep(i,1,n)
    35     {
    36         rep(j,dat[i].l,dat[i].r)
    37             if(pos[j]){pos[j]--,ans++;break;}
    38     }
    39     printf("%d",ans);
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    1211.zuoye
    hw.python 鹿宏扬
    1206 python 鹿宏扬
    linux基础笔记
    Python20181204
    python1819 鹿宏扬 linux基础笔记
    [Kotlin]Spring Boot 使用thinJar打包找不到manifest问题
    Spring Boot设置默认返回UTF-8
    Go实现上传下载功能
    Flutter(二)Form Validating(表单验证)
  • 原文地址:https://www.cnblogs.com/ibilllee/p/9221027.html
Copyright © 2011-2022 走看看