• acwing 110 防晒


    https://www.acwing.com/problem/content/description/112/

    有C头奶牛进行日光浴,第i头奶牛需要minSPF[i]到maxSPF[i]单位强度之间的阳光。

    每头奶牛在日光浴前必须涂防晒霜,防晒霜有L种,涂上第i种之后,身体接收到的阳光强度就会稳定为SPF[i],第i种防晒霜有cover[i]瓶。

    求最多可以满足多少头奶牛进行日光浴。

    输入格式

    第一行输入整数C和L。

    接下来的C行,按次序每行输入一头牛的minSPF和maxSPF值,即第i行输入minSPF[i]和maxSPF[i]。

    再接下来的L行,按次序每行输入一种防晒霜的SPF和cover值,即第i行输入SPF[i]和cover[i]。

    每行的数据之间用空格隔开。

    输出格式

    输出一个整数,代表最多可以满足奶牛日光浴的奶牛数目。

    数据范围

    1C,L25001≤C,L≤2500,
    1minSPFmaxSPF10001≤minSPF≤maxSPF≤1000,
    1SPF10001≤SPF≤1000

    输入样例:
    3 2
    3 10
    2 5
    1 5
    6 2
    4 1
    输出样例:
    2

    本题使用贪心算法。 将所有牛能接受的防晒霜范围 按照起点进行排序,将拥有的防晒霜按照值也进行排序

    从起点靠后的牛开始计算,选取牛能接受的防晒霜数值最大的那瓶,

    因为牛能接受的防晒霜数值范围起点越靠后,那么将数值靠前的防晒霜留给后面的牛,自己选择和自己范围同样靠后的防晒霜是最佳选择

    代码

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 
     6 using namespace std;
     7 
     8 
     9 int n, m;
    10 const int N = 2510;
    11 vector<pair<int, int>>  vecPII(2510,pair<int,int>());
    12 vector<pair<int, int>>    vecSpf(2510, pair<int, int>());
    13 int main()
    14 {
    15     cin >> n >> m;
    16 
    17     for (int i = 0; i < n; i++) {
    18         cin >> vecPII[i].first >> vecPII[i].second;
    19     }
    20     sort(&vecPII[0], &vecPII[0] + n);
    21     reverse(&vecPII[0], &vecPII[0] + n);
    22 
    23     for (int i = 0; i < m; i++) {
    24         cin >> vecSpf[i].first >> vecSpf[i].second;
    25     }
    26     sort(&vecSpf[0], &vecSpf[0] + m);
    27     reverse(&vecSpf[0], &vecSpf[0] + m);
    28 
    29     int ret = 0;
    30     for (int i = 0; i < n; i++) {
    31         int maxlimit = vecPII[i].second;
    32         int minlimit = vecPII[i].first;
    33         for (int j = 0; j < m; j++) {
    34             if (vecSpf[j].first <= maxlimit && vecSpf[j].first >= minlimit &&
    35                 vecSpf[j].second > 0) {
    36                 vecSpf[j].second--;
    37                 ret++;
    38                 break;
    39             }
    40 
    41         }
    42     }
    43 
    44     cout << ret << endl;
    45 
    46     return 0;
    47 }
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    CodeForces 1294B Collecting Packages(排序+贪心)
    计算系数(组合数)
    垒骰子(矩阵快速幂)
    蒜头君倒水(矩阵快速幂)
    Buy Tickets POJ
    Billboard HDU
    树状数组求逆序对 附HDU1394
    codeforces 1304D Shortest and Longest LIS
    codeforces 1301C Ayoub's function
    Codeforces 1301B Motarack's Birthday(二分)
  • 原文地址:https://www.cnblogs.com/itdef/p/10988881.html
Copyright © 2020-2023  润新知