码迷,mamicode.com
首页 > 其他好文 > 详细

贪心+优先队列 POJ3614

时间:2016-07-15 06:23:57      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

m头牛每头牛有minspf和maxspf,n种spf为spf[i]的防晒霜每种l[i]瓶,尽可能给数量多的牛涂防晒霜,每头牛最多涂一瓶。

贪心想法后,实现是每次取出minspf<=spf[i]的牛加入优先队列中,优先队列以牛的maxspf为优先,给maxspf>=spf[i]且maxspf从小开始取的牛涂(优先队列)。

技术分享
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
pair<int,int> cow[2510];
pair<int,int> bot[2510];
struct cmp {
    bool operator () (pair<int,int>  a,pair<int,int>  b) {
        return a.second>b.second;
    }
};

priority_queue<pair<int,int>,vector<pair<int,int> >,cmp> pq;
int main() {
    int c,l,smin,smax,cnt=0;
    scanf("%d%d",&c,&l);
    for(int i=0;i<c;i++) {
        scanf("%d%d",&cow[i].first,&cow[i].second);
    }
    sort(cow,cow+c);
    for(int i=0;i<l;i++) {
        scanf("%d%d",&bot[i].first,&bot[i].second);
    }
    sort(bot,bot+l);
    pair<int,int> temp;
    int j=0;
    for(int i=0;i<l;i++) {
        while(j<c &&cow[j].first<=bot[i].first) {
            pq.push(cow[j]);
            j++;
        }
        while(bot[i].second>0 && !pq.empty()) {
            temp=pq.top();
            pq.pop();
            if(temp.second>=bot[i].first) {
                cnt++;
                bot[i].second--;
            }    
        } 
    }
    printf("%d\n",cnt);
    return 0;
}
View Code

 

贪心+优先队列 POJ3614

标签:

原文地址:http://www.cnblogs.com/LinesYao/p/5672171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!