zoukankan      html  css  js  c++  java
  • POJ 3622 Gourmet Grazers(贪心)

    【题目链接】 http://poj.org/problem?id=3622

    【题目大意】

      给出一些物品拥有两个属性值,价格和精美程度
      给出一些需求表示要求获得的物品两个属性值的两种属性下界,
      一个物品只能用一次,问满足所有需求的最小价格。

    【题解】

      我们将物品和需求按照精美程度排序,这样我们就得到了价格的一个序列
      我们降序处理物品,则可以保证对于当前需求,前面的所有物品均满足其精美程度的需求
      这个时候我们只要找到满足条件的最低价格来供给这个需求,就一定是最优的,
      对于最优情况的查找,我们用平衡树来维护。

    【代码】

    #include <cstdio>  
    #include <algorithm>  
    #include <set>  
    using namespace std;
    typedef long long LL;  
    const int N=100000;  
    struct data{int x,y;}p[N],u[N];  
    int n,m;  
    bool cmp(data a,data b){return a.y>b.y;}  
    void solve(){
        LL ans=0;
        int j=0,flag=1; 
        for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y);  
        for(int i=0;i<m;i++)scanf("%d%d",&u[i].x,&u[i].y);  
        sort(p,p+n,cmp); sort(u,u+m,cmp);  
        multiset<int> M;
        for(int i=0;i<n;i++){  
            while(j<m&&u[j].y>=p[i].y)M.insert(u[j++].x);  
            multiset<int>::iterator it=M.lower_bound(p[i].x);  
            if(it==M.end()){flag=0;break;}  
            else{ans+=*it;M.erase(it);}
        }printf("%lld
    ",flag?ans:-1);          
    }
    int main(){  
        while(~scanf("%d%d",&n,&m))solve();
        return 0;  
    }  
  • 相关阅读:
    clr via c# 定制特性
    clr via c# delegate
    clr via c# Array2
    clr from c# 字符 ,字符串 和 文本处理
    clr via c# 接口
    clr via c# 泛型
    clr via c# 事件
    clr via c# 参数和属性
    程序设计入门——C语言 第6周编程练习 2 完数(5分)
    程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)
  • 原文地址:https://www.cnblogs.com/forever97/p/poj3622.html
Copyright © 2011-2022 走看看