zoukankan      html  css  js  c++  java
  • 51Nod 1191 消灭兔子 (贪心+优先队列)

      对兔子血量排个降序(即从血多的开始杀),对弓箭按伤害值降序排。对每一只兔子,都要把能杀死他的弓箭的价值入队,入队完毕以后,如果队列为空说明这个兔子杀不了,不为空说明这个兔子能杀,那就从能杀这个兔子的弓箭里选个最便宜的,按照这样对n只兔子操作

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn=5e4+10;
    struct node
    {
        int d,p;
        node(int dd=0,int pp=0)
        {
            d=dd;
            p=pp;
        }
    }a[maxn];
    struct node1
    {
        int p;
        node1(int pp=0)
        {
            p=pp;
        }
        friend bool operator<(const node1&ii,const node1&oo)
        {
            return ii.p>oo.p;
        }
    };
    bool cmp1(const int&aa,const int&bb)
    {
        return aa>bb;
    }
    bool cmp2(const node&j1,const node&j2)
    {
        return j1.d>j2.d;
    }
    int b[maxn];
    int main()
    {
        int n,m,flag=1;
        ll ans=0;
        scanf("%d %d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&(b[i]));
        for(int i=1;i<=m;i++) scanf("%d %d",&(a[i].d),&(a[i].p));
        sort(b+1,b+n+1,cmp1);
        sort(a+1,a+m+1,cmp2);
        priority_queue<node1>q;
        while(!q.empty())
            q.pop();
        for(int i=1,j=1;i<=n;i++)
        {
            while(j<=m&&a[j].d>=b[i])
                    q.push(node1(a[j].p)),j++;
            if(q.empty())
            {
                printf("No Solution
    ");
                return 0;
            }
            ans+=q.top().p;
            q.pop();
        }
        printf("%lld
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    神经网络
    机器学习英语
    机器学习常用函数解析
    机器学习(二)
    机器学习(三)
    Python文本数据分析与处理
    数据分析
    sklearn
    「Poetize9」升降梯口
    「Poetize9」礼物运送
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754854.html
Copyright © 2011-2022 走看看