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;
    }
    
    
  • 相关阅读:
    处理空值排序
    TRANSLATE
    按计算列排序
    从表中随机返回n条记录
    Gazebo機器人仿真學習探索筆記(五)環境模型
    Gazebo機器人仿真學習探索筆記(四)模型編輯
    如何围绕业务特性,做企业信息化?
    機器人仿真與控制學習小結
    Gazebo機器人仿真學習探索筆記(三)機器人模型
    Gazebo與ROS版本說明
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798837.html
Copyright © 2011-2022 走看看