• POJ 3614 Sunscreen 贪心


    题目链接:

    http://poj.org/problem?id=3614

    Sunscreen

    Time Limit: 1000MS
    Memory Limit: 65536K
    #### 问题描述 > 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?

    输入

    • 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

    样例

    sample input
    3 2
    3 10
    2 5
    1 5
    6 2
    4 1
    sample output
    2

    题意

    有c头牛晒太阳,每头牛都有一个能承受辐射的范围(min~max),现在有 l 种防晒霜,每种防晒霜都能将辐射值固定在spf,每种防晒霜都有一定的数量num。每头牛用最多一种防晒霜,问能满足多少头牛。

    题解

    贪心
    对所有的牛按左端点排序,最所有的防晒霜按其spf值排序,然后从小到大枚举防晒霜,枚举到第i个防嗮霜的时候在所有可以满足的牛里面贪心选出一个右端点最小的牛(它最不可能用到后面的防嗮霜,所有他优先选)。

    代码

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<algorithm>
    #include<queue>
    #include<functional>
    #define X first
    #define Y second
    #define mp make_pair
    using namespace std;
    
    const int maxn = 2555;
    int n, m;
    
    struct Node {
    	int x, y;
    	Node(int x,int y):x(x),y(y){}
    	bool operator < (const Node& tmp) const {
    		return y > tmp.y;
    	}
    };
    
    vector<pair<int, int> > cow, sc;
    
    int main() {
    	while (scanf("%d%d", &n, &m) == 2 && n) {
    		cow.clear(); sc.clear();
    		for (int i = 0; i < n; i++) {
    			int x, y; scanf("%d%d", &x, &y);
    			cow.push_back(mp(x, y));
    		}
    		for (int i = 0; i < m; i++) {
    			int x, y; scanf("%d%d", &x, &y);
    			sc.push_back(mp(x, y));
    		}
    		sort(cow.begin(), cow.end());
    		sort(sc.begin(), sc.end());
    		int ans = 0,st=0;
    		priority_queue<Node> pq;
    		for (int i = 0; i < m; i++) {
    			while (st < n&&cow[st].X <= sc[i].X) {
    				pq.push(Node(cow[st].X, cow[st].Y));
    				st++;
    			}
    			while (!pq.empty() && sc[i].Y) {
    				if (sc[i].X <= pq.top().y) {
    					sc[i].Y--;
    					ans++;
    				}
    				pq.pop();
    			}
    		}
    		printf("%d
    ", ans);
    	}
    	return 0;
    }
  • 相关阅读:
    【Python图像特征的音乐序列生成】解析ABC格式的文件(修改版)
    【Python图像特征的音乐序列生成】关于数据库到底在哪里下载
    假期周进度报告2
    假期周进度报告1
    河北省科技创新平台系统头脑风暴会
    问题账户需求分析
    2018年春季个人阅读计划
    软件需求与分析读后感
    《需求工程——软件建模与分析》读后感3
    《需求工程——软件建模与分析》读后感2
  • 原文地址:https://www.cnblogs.com/fenice/p/5678653.html
Copyright © 2020-2023  润新知