• USACO 2007 NOV Sunscreen 防晒霜 贪心


    题目

    题目描述

    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; minSPFi ≤ maxSPFi ≤ 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?

    有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。

    而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。

    那么为了不让奶牛烫伤,又不会没有效果。

    给出了L种防晒霜。每种的数量和固定的阳光强度也给出来了

    每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。

    输入输出格式

    输入格式:

    * 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

    输出格式:

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

    输入输出样例

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

    分析

    中文翻译有点误导,自己看清楚了,防晒霜是先读防晒指数,再读防晒霜的个数。奶牛按上限排序,而防晒霜直接按防晒值排序就可以了。

    我对于这种排序方式的理解是:我们使得防晒值与奶牛上限越接近,意味着后面的防晒霜越难来满足这只奶牛,也就是这瓶防晒霜来满足这只奶牛是更优的。一瓶防晒霜最多只能满足一只奶牛,所以如果能满足,那么就用这瓶防晒霜。这就是这道题一个贪心的想法。

    程序

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int MAXC = 2500 + 1;
     4 struct node
     5 {
     6     int Mn, Mx;
     7 }cows[MAXC];
     8 struct sunscreen
     9 {
    10     int amt, cov;
    11 }ss[MAXC];
    12 bool comp1(node x, node y)
    13 {
    14     return x.Mx < y.Mx;
    15 }
    16 bool comp2(sunscreen x, sunscreen y)
    17 {
    18     return x.cov < y.cov;
    19 }
    20 int main()
    21 {
    22     int c,l,ans;
    23     cin >> c >> l;
    24     for (int i = 1; i <= c; i++)
    25         cin >> cows[i].Mn >> cows[i].Mx;
    26     for (int i = 1; i <= l; i++)
    27         cin >> ss[i].cov >> ss[i].amt;
    28     sort(cows+1, cows+(c+1),comp1);
    29     sort(ss+1, ss+(l+1), comp2);
    30     for (int i = 1; i <= c; i++)
    31     {
    32         for (int j = 1; j <= l; j++)
    33             if(ss[j].cov >= cows[i].Mn && ss[j].cov <= cows[i].Mx && ss[j].amt)
    34             {
    35                 ss[j].amt--;
    36                 ans++;
    37                 break;
    38             }
    39     }
    40     cout << ans << endl;
    41     return 0;
    42 }
  • 相关阅读:
    shell脚本
    恋练有词
    sublime text3 的汉化
    c#中如何将int i=1;转化成string s="0001"
    SQL语句中DateAdd 函数说明
    ASP.NET弹出对话框
    C/C++避免头文件包含造成的重定义方法
    Android:保存图片到Sqlite数据库
    Ubuntu 12.04 配置
    C# 实现天气预报
  • 原文地址:https://www.cnblogs.com/OIerPrime/p/8504387.html
Copyright © 2020-2023  润新知