zoukankan      html  css  js  c++  java
  • POJ3614防晒霜 这个贪心有点东西(贪心+优先队列)

    这个题是说有C头牛去晒太阳,带了L瓶防晒霜,每瓶防晒霜都有一个SPF值(每瓶防晒霜都能解决一个最短路
    每头牛给出了他可以接受防晒霜的上限,和下限,每种防晒霜都给出了SPF值与数量。
    从防晒霜的spf值最小开始贪心,每次将奶牛最大接受限度小的牛且符合条件选出,那么这头牛一定比其他牛接受范围更小,应该优先选择。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=3000;
    struct cow
    {
        int maxi;
        int mini;
        bool operator <(const cow & w)const
        {
            if(maxi==w.maxi)    return mini<w.mini;
            return maxi>w.maxi;
        }
        bool operator ==(const cow & w)const
        {
            if(maxi==w.maxi&&mini==w.mini)    return 1;
            return 0;
        }
    } w ;
    struct spf
    {
        int sp;
        int nu;
        bool operator <(const spf& w)const
        {
            return sp>w.sp;
        }
    } x;
    int n,m,ans;
    priority_queue<spf> s;
    cow c[maxn];
    priority_queue<cow>cw;
    int main()
    {
        cin>>n>>m;
        for(int i=0;i<n;i++)
            cin>>c[i].mini>>c[i].maxi;
        for(int i=0;i<m;i++)
            cin>>x.sp>>x.nu,s.push(x);
    //    cout<<(s.top().sp)<<endl;
        while(!s.empty())
        {
            spf tem=s.top();
            s.pop();
            while(!cw.empty())cw.pop();
            for(int i=0;i<n;i++)
            {
                if(c[i].mini<=tem.sp&&c[i].maxi>=tem.sp)
                cw.push(c[i]);
            }
            if(!cw.empty()){
                cow temp=cw.top();
                c[find(c,c+n,temp)-c].maxi=-99;
                ans++;
                tem.nu--;
                if(tem.nu!=0) s.push(tem);
            }
            else ;
            if(ans==n) break;
        }
        cout<<ans<<endl;
    }
    
    
  • 相关阅读:
    Kotlin技术入门以及和Java对比.md
    最新版Charles破解方法(Mac+Windows).md
    阿里移动云专场专题.md
    win10下 github+hexo搭建个人博客.md
    Java内存回收机制.md
    基于补偿的数据库分布式事务实践
    Log4J,在踩坑中升级版本
    关于服务注册与发现
    JVM内存模型-重排序&内存屏障
    GC初识
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798837.html
Copyright © 2011-2022 走看看